1

我正在学习使用 PostgreSQL 和 GORM。麻烦来得相对较快,感觉好像我是唯一一个遇到这个问题的人。

在这里,我正在创建一个结构,对其进行实例化,并尝试将其写入数据库。但是,它返回一个错误:

pq: RETURNING must contain at least one value

尝试谷歌搜索,我发现的唯一东西是 Postgres 源代码,它可能是中文的。

源代码:

db, err := gorm.Open("postgres", "user=postgres dbname=testdb sslmode=disable password=qwerty")
if err != nil {
    panic(err.Error())
}
defer db.Close()

database := db.DB()

err = database.Ping()
if err != nil {
    panic(err.Error())
}

db.AutoMigrate(&Currency{})

fmt.Println("Connection to PostgreSQL was successful!")

testCur := Currency{"shekels", 20}
if db.NewRecord(testCur) {
    err := db.Create(&testCur).Error
    if err != nil {
        panic(err.Error())
    }
}

结构:

type Currency struct {
name string
rate uint
}

是的,必须使用 Postgres 和 GORM 来完成。数据库是全新的,空的。

4

1 回答 1

1

突出的一件事是您struct只包含未导出的字段:

type Currency struct {
    name string
    rate uint
}

这些字段对 Gorm 都不可见(可能使用反射将您转换struct为 SQL)。这将导致 Gorm 尝试INSERT用一个RETURNING子句做一个空来取回一些东西,但是,由于 Gorm 看不到任何要 INSERT 的内容,它不会在 RETURNING 子句中要求任何内容,并且您的错误相当令人困惑。

struct如果您修复导出这些字段,我认为您会有更好的运气:

type Currency struct {
    Name string
    Rate uint
}
于 2019-07-26T21:17:46.677 回答