go-gorm / playground

GORM Playground (Please Create PR for this project to report issues)
MIT License
89 stars 678 forks source link

bug: postgres driver tries to insert slices and arrays as records, and fails #668

Open sleddev opened 9 months ago

sleddev commented 9 months ago

Explain your user case and expected results

When inserting go arrays or slices in a GORM model, the generated SQL uses them as records, so the insert fails.

For example:

type Test struct {
    Data []float64 `gorm:"type:float8[]"`
}

test := Test{Data: []float64{8, 4, 2, 1, 0.5}}
DB.Create(&test)

gives the SQL:

INSERT INTO "tests" ("data") VALUES ((8,4,2,1,0.5))

And I get the error ERROR: column "data" is of type double precision[] but expression is of type record (SQLSTATE 42804)

Instead, the SQL should be:

INSERT INTO "tests" ("data") VALUES ('{8,4,2,1,0.5}')

or

INSERT INTO "tests" ("data") VALUES (ARRAY [8,4,2,1,0.5])