打开与数据库的连接的代码:

DB, err = sql.Open("postgres", "dbname=dev user=postgres password=postgres port=5400 sslmode=disable")

我正试着做一个简单的select query,就像:

err := DB.QueryRow("SELECT id FROM user WHERE id = $1", id)

但我得到的错误是:pq: column id does not exist

然而,如果我try schema:

err := DB.QueryRow("SELECT id FROM public.user WHERE id = $1", id)

一切都很顺利.我不明白为什么我一定要写schema,即使default schema是我在Docker上运行的postgresql中的public

推荐答案

user是postgres的保留关键字,用于获取有关当前数据库用户的信息.当您运行类似SELECT * FROM user的查询时,它将检索有关当前数据库用户的信息,而不是来自名为user的表的数据.

但如果有SELECT id FROM public.user个,它将从public个模式的user个表中得到结果.这确保了PostgreSQL专门查找user表的public模式并检索所需的数据.

Solutions

1-将表重命名为users

2-或将架构名称与查询一起使用.

References:

Go相关问答推荐

Go PQ驱动程序无法使用默认架构进行查询

GORM Find(&;Room)操作使用空数据而不是实际数据填充 struct

将DATE类型的SQL字段扫描到GO struct 字段

在运行时更改 Go lang slog 的日志(log)级别

Go 中带有回调的 MiniDumpWriteDump

用于提取 <*n 的正则表达式(其中 n 是一个数字)

下载和合并时输出文件已损坏

数据流中的无根单元错误,从 Golang 中的 PubSub 到 Bigquery

如何在golang中按字符a对字符串数组进行排序

Golang - 客户 Unmarshaler/Marshaler 在指针上具有 nil/null 值

将 Golang Gin 与 AWS Lambda 和无服务器与代理路径一起使用

Go 中 SDL Surface 的 OpenGL 纹理

Golang Echo Labstack 如何在模板视图中调用函数/方法

HTTP 重定向不呈现新页面

从 Go struct 中提取标签作为 reflect.Value

Golang 'defer' 导致发送(接收)API 响应延迟

泛型:对具有返回自身的函数的类型的约束

有没有办法在golang中映射一组对象?

Gin中测试模式有什么用

全局记录(across packages)