使用 go-pg 从 Postgres 中检索虚拟列
Using go-pg to retrieve virtual columns from Postgres
我正在使用 go-pg
(https://github.com/go-pg/pg) 和此代码:
type Book struct {
id int
name string
}
var books []Book
err := db.Model(&books).Select()
一切正常,但我需要像这样添加一个 "virtual" 列:
concat ('info:', 'id:', id, '...') AS info
我尝试使用:
query.ColumnExpr("concat ('info:', 'id:', id, '...') AS info")
但是:
go-pg 抱怨:error="pg: can't find column=info in model=Book (try discard_unknown_columns)"
go-pg 在查询中不再包含 id
和 name
列:仅 concat...
!
我能理解,因为现在 go-pg 不知道如何绑定数据,但我真的需要那个只能从数据库中检索的字符串。
有办法吗?
我可以使用像下面这样的自定义类型吗?
type CustomBook struct {
Info string
Book
}
这有意义吗?
这种方法可能适合你:
type Book struct {
ID int
Name string
Info string `pg:"-"`
}
...
db.Model(&books).ColumnExpr("book.*").ColumnExpr("CONCAT('id:', id, 'name:', name) AS info").Select()
pg:"-"
忽略结构字段,它不会被创建,也不会产生任何错误
此处记录了这个被忽略的列:https://pg.uptrace.dev/models/
另一种方法,根据您的要求可能是这样的:
var r []struct {
Name string
Info string
}
db.Model((*Book)(nil)).Column("name").ColumnExpr("CONCAT('id:', id, 'name:', name) AS info").Select(&r)
第二个记录在此处:https://pg.uptrace.dev/queries/
我正在使用 go-pg
(https://github.com/go-pg/pg) 和此代码:
type Book struct {
id int
name string
}
var books []Book
err := db.Model(&books).Select()
一切正常,但我需要像这样添加一个 "virtual" 列:
concat ('info:', 'id:', id, '...') AS info
我尝试使用:
query.ColumnExpr("concat ('info:', 'id:', id, '...') AS info")
但是:
go-pg 抱怨:
error="pg: can't find column=info in model=Book (try discard_unknown_columns)"
go-pg 在查询中不再包含
id
和name
列:仅concat...
!
我能理解,因为现在 go-pg 不知道如何绑定数据,但我真的需要那个只能从数据库中检索的字符串。
有办法吗?
我可以使用像下面这样的自定义类型吗?
type CustomBook struct {
Info string
Book
}
这有意义吗?
这种方法可能适合你:
type Book struct {
ID int
Name string
Info string `pg:"-"`
}
...
db.Model(&books).ColumnExpr("book.*").ColumnExpr("CONCAT('id:', id, 'name:', name) AS info").Select()
pg:"-"
忽略结构字段,它不会被创建,也不会产生任何错误
此处记录了这个被忽略的列:https://pg.uptrace.dev/models/
另一种方法,根据您的要求可能是这样的:
var r []struct {
Name string
Info string
}
db.Model((*Book)(nil)).Column("name").ColumnExpr("CONCAT('id:', id, 'name:', name) AS info").Select(&r)
第二个记录在此处:https://pg.uptrace.dev/queries/