gorm/documents/dialects.md

59 lines
1.4 KiB
Markdown

# Dialects
<!-- toc -->
## Dialect Specific Columns
Certain dialects of SQL ship with their own custom, non-standard column types, such as the ```jsonb``` column in PostgreSQL. GORM supports loading several of such types, as listed in the following sections.
#### PostgreSQL
GORM supports loading the following PostgreSQL exclusive column types:
- jsonb
- hstore
Given the following Model definition:
````go
import (
"encoding/json"
"fmt"
"reflect"
"github.com/jinzhu/gorm"
"github.com/jinzhu/gorm/dialects/postgres"
)
type Document struct {
Metadata postgres.Jsonb
Secrets postgres.Hstore
Body string
ID int
}
````
You may use the model like so:
````go
password := "0654857340"
metadata := json.RawMessage(`{"is_archived": 0}`)
sampleDoc := Document{
Body : "This is a test document",
Metadata : postgres.Jsonb{ metadata },
Secrets : postgres.Hstore{"password" : &password },
}
//insert sampleDoc into the database
db.Create(&sampleDoc)
//retrieve the fields again to confirm if they were inserted correctly
resultDoc := Document{}
db.Where("id = ?", sampleDoc.ID).First(&resultDoc)
metadataIsEqual := reflect.DeepEqual( resultDoc.Metadata, sampleDoc.Metadata)
secretsIsEqual := reflect.DeepEqual( resultDoc.Secrets, resultDoc.Secrets)
//this should print "true"
fmt.Println("Inserted fields are as expected:", metadataIsEqual && secretsIsEqual)
````