方言的特殊类型

创建新方言

GORM 官方支持以下几种方言:sqlite, mysql, postgres, mssql.

你可以通过创建一个新的方言来为其它数据库提供支持。 当你创建一个新方言的时候,你必须实现 the dialect interface 接口。

某些数据库可能兼容 mysqlpostgres 方言,此时你可以直接使用现有方言。

方言的特殊类型

某些 SQL 的方言包含特殊的、非标准的类型,比如 PostgreSQL 中的 jsonb 类型。 GORM 支持其中的几种类型,如下所示。

PostgreSQL

GORM 支持加载以下 PostgreSQL 特有类型: - jsonb - hstore

Model 定义如下:

import (
"encoding/json"
"github.com/jinzhu/gorm/dialects/postgres"
)

type Document struct {
Metadata postgres.Jsonb
Secrets postgres.Hstore
Body string
ID int
}

你可以这样使用 model:

password := "0654857340"
metadata := json.RawMessage(`{"is_archived": 0}`)
sampleDoc := Document{
Body: "This is a test document",
Metadata: postgres.Jsonb{ RawMessage: metadata },
Secrets: postgres.Hstore{"password": &password},
}

// 将 sampleDoc 添加到数据库
db.Create(&sampleDoc)

// 再次检索字段,以确保它们是否已经正确添加
resultDoc := Document{}
db.Where("id = ?", sampleDoc.ID).First(&resultDoc)

metadataIsEqual := reflect.DeepEqual(resultDoc.Metadata, sampleDoc.Metadata)
secretsIsEqual := reflect.DeepEqual(resultDoc.Secrets, sampleDoc.Secrets)

// 打印结果应该是 "true"
fmt.Println("Inserted fields are as expected:", metadataIsEqual && secretsIsEqual)