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