RETURNING必须包含至少一个值

时间:2019-07-26 20:49:55

标签: database postgresql go go-gorm pq

我正在学习使用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完成。数据库是全新的,空的。

1 个答案:

答案 0 :(得分:1)

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

type Currency struct {
    name string
    rate uint
}

这些字段都不对Gorm可见(可能使用反射将struct转换为SQL)。这将导致Gorm尝试使用RETURNING子句做空的INSERT来取回某些内容,但是由于Gorm看不到要插入的任何内容,因此它不会在RETURNING子句中要求任何内容并且存在您相当混乱的错误。

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

type Currency struct {
    Name string
    Rate uint
}