猿问

使用 GORM 从 Postgresql 中检索表名

希望从我的 postgresql 数据库中检索表名。现在,我知道在 Go 中你可以使用 sql 和 pq 驱动程序,但我使用 GORM 在我的 REST API 中进行查询。


PostgreSQL 中的 table_name 类型是“information_schema.sql_identifier”。这是我试图做的,但类型不是字符串。


var tables []string

if err := db.Table("information_schema.tables").Select("table_name").Where("table_schema = ?", "public").Find(&tables).Error; err != nil {

    panic(err)

}


青春有我
浏览 344回答 1
1回答

翻过高山走不出你

要使用 Gorm 将单个列值选择到切片中,可以使用db.Pluck帮助器:var tables []stringif err := db.Table("information_schema.tables").Where("table_schema = ?", "public").Pluck("table_name", &tables).Error; err != nil {    panic(err)}TS;WM考虑到这一点,SELECT 语句返回一组包含一个或多个列的行。为了将它们映射到 Go 代码,我们需要一种结构,以便 Gorm 可以了解哪个列映射到结构的哪个字段。即使您只选择 1 个单列,它也只是一个具有 1 个单字段的结构。type Table struct {    TableName   string    // more fields if needed...}所以你的输出变量应该是[]*Table:var tables []*Tableif err := db.Table("information_schema.tables").Select("table_name").Where("table_schema = ?", "public").Find(&tables).Error; err != nil {    panic(err)}注意:[]Table如果您不想修改切片内的元素,也可以这样做。如果您不想定义结构,则可以使用该db.Pluck函数,它只是此类代码的助手:rows, err := db.Table("information_schema.tables").Select("table_name").Where("table_schema = ?", "public").Rows()defer rows.Close()var tables []stringvar name stringfor rows.Next() {    row.Scan(&name)    tables = append(tables, name)}
随时随地看视频慕课网APP

相关分类

Go
我要回答