DRYな備忘録

Don't Repeat Yourself.

gormでcomposite primary keyを使いたいのだが

なんかこうするっぽい

type Foo struct {
    Bar string `gorm:"primary_key"`
    Baz int    `gorm:"primary_key"`
}

で、gorm.DBのAutoMigrateかCreateTableを叩けばいいわけで、LogMode(true)で発行されてるSQLを確認すると

CREATE TABLE "foos" (
    "bar" varchar(255),
    "baz" serial,
    PRIMARY KEY (bar,baz)
)

だいたいあってるんだけど、bazserialだとダメなんですけどそれは

原因究明

修正した

type Foo struct {
    Bar string `gorm:"primary_key"`
-   Baz int    `gorm:"primary_key"`
+   Baz int    `gorm:"primary_key" sql:"TYPE:int"`
}

そしたら

CREATE TABLE "foos" (
    "bar" varchar(255),
    "baz" int,
    PRIMARY KEY (bar,baz)
)

ほしいSQLになった

DRY