创建新方言

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

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

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

方言的特殊类型

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

PostgreSQL

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

Model 定义如下:

  1. import (
  2. "encoding/json"
  3. "github.com/jinzhu/gorm/dialects/postgres"
  4. )
  5. type Document struct {
  6. Metadata postgres.Jsonb
  7. Secrets postgres.Hstore
  8. Body string
  9. ID int
  10. }

你可以这样使用 model:

  1. password := "0654857340"
  2. metadata := json.RawMessage(`{"is_archived": 0}`)
  3. sampleDoc := Document{
  4. Body: "This is a test document",
  5. Metadata: postgres.Jsonb{ RawMessage: metadata },
  6. Secrets: postgres.Hstore{"password": &password},
  7. }
  8. // 将 sampleDoc 添加到数据库
  9. db.Create(&sampleDoc)
  10. // 再次检索字段,以确保它们是否已经正确添加
  11. resultDoc := Document{}
  12. db.Where("id = ?", sampleDoc.ID).First(&resultDoc)
  13. metadataIsEqual := reflect.DeepEqual(resultDoc.Metadata, sampleDoc.Metadata)
  14. secretsIsEqual := reflect.DeepEqual(resultDoc.Secrets, sampleDoc.Secrets)
  15. // 打印结果应该是 "true"
  16. fmt.Println("Inserted fields are as expected:", metadataIsEqual && secretsIsEqual)