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

Go sql.QueryContext操作PostgreSQL表名被转小写的非新建表解决办法

解决PostgreSQL大小写表名查询问题的可行方案

以下是除了新建小写表之外的几种解决办法:

  • 在SQL语句中用双引号包裹大小写敏感的表名
    PostgreSQL默认会将未加双引号的标识符(表名、列名等)转换为小写,因此要保留Role的大小写,必须用双引号包裹。在Go代码中可以通过两种方式处理:

    // 方式1:转义双引号
    query := "SELECT * FROM public.\"Role\" WHERE login='Bob'"
    rows, err := db.QueryContext(ctx, query)
    
    // 方式2:用反引号包裹SQL字符串,无需转义双引号
    query := `SELECT * FROM public."Role" WHERE login='Bob'`
    rows, err := db.QueryContext(ctx, query)
    

    另外注意原SQL中login=Bob存在语法错误,字符串值Bob必须用单引号包裹,否则PostgreSQL会将其当作标识符处理。

  • 创建小写视图映射原表
    可以创建一个名为role的视图,指向原Role表,这样既不用修改原表结构,也能通过小写表名查询数据:

    CREATE VIEW public.role AS SELECT * FROM public."Role";
    

    之后执行SELECT * FROM public.role WHERE login='Bob'即可正常获取原表的数据。

  • 修改PostgreSQL全局配置强制引号包裹标识符
    修改PostgreSQL的postgresql.conf配置文件,将quote_all_identifiers参数设置为on,这样PostgreSQL会自动为所有标识符添加双引号,保留原始大小写。修改后需要重启PostgreSQL服务生效。
    注意:该方法会影响整个数据库的标识符处理逻辑,可能导致现有依赖小写标识符的查询出现异常,需谨慎使用。

内容的提问来源于stack exchange,提问作者a.rahmanovsky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 10:03:28