You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GO PQ驱动无法使用默认Schema查询PostgreSQL问题求助

问题原因与解决办法

核心原因

user是PostgreSQL的保留关键字,当你直接写SELECT id FROM user WHERE id = $1时,PostgreSQL会把user解析为关键字而非表名,导致SQL语句逻辑完全偏离预期,因此抛出pq: column id does not exist的错误。而指定public.user时,明确告诉数据库这是public schema下的user表,避免了关键字解析冲突。

解决办法

有三种常见处理方式:

  1. 始终指定Schema限定表名
    延续你当前可行的写法,用public.user明确表的位置:
    err := DB.QueryRow("SELECT id FROM public.user WHERE id = $1", id)
    
  2. 用双引号包裹表名
    在SQL中将表名用双引号括起来,强制PostgreSQL将其识别为表名:
    err := DB.QueryRow("SELECT id FROM \"user\" WHERE id = $1", id)
    
  3. 修改表名(推荐)
    避免使用保留关键字作为表名,从根源解决问题,比如把表名改成users:
    ALTER TABLE "user" RENAME TO users;
    
    之后查询可直接写:
    err := DB.QueryRow("SELECT id FROM users WHERE id = $1", id)
    

内容的提问来源于stack exchange,提问作者Vinícius OA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 09:04:51