pgAdmin4查询PostgreSQL列需加双引号,能否修改设置取消该要求?
根因说明
这不是可直接切换的全局配置项,差异来自两套环境的表结构定义区别,和操作系统无关。PostgreSQL对标识符的大小写处理有固定规则:
- 不带双引号的标识符会被自动转为全小写后再做匹配
- 带双引号的标识符会严格保留大小写做匹配
你Manjaro环境的sales表在建表时,列名是用双引号包裹的驼峰格式(比如CREATE TABLE sales ("saleDate" DATE, ...)),所以列名会以saleDate的格式存储,查询时写不带双引号的saleDate会被转为全小写的saledate,和实际存储的列名不匹配,就会抛出42703错误。
而Ubuntu环境建表时没有给列名加双引号,saleDate会被自动转成saledate存储,后续查询时写saleDate也会被转成saledate,自然可以正常匹配。
解决方案
方案1:修改列名为全小写(最推荐,一劳永逸)
直接把现有驼峰列名改为全小写,后续查询就不需要加双引号:
ALTER TABLE sales RENAME COLUMN "saleDate" TO saledate; ALTER TABLE sales RENAME COLUMN "saleAmount" TO saleamount;
修改完成后,你原来的SELECT saleDate,qty,saleAmount FROM sales语句就可以正常执行。
方案2:查询时加别名(临时使用,不修改表结构)
如果不方便调整表结构,可以在查询时给驼峰列加双引号后取全小写别名,后续业务逻辑直接用别名即可:
SELECT "saleDate" AS saledate, "qty", "saleAmount" AS saleamount FROM sales;
注意
PostgreSQL本身没有全局开关可以修改大小写匹配规则,部分客户端提供的强制标识符大小写转换配置会严重降低SQL兼容性,跨环境运行时容易触发未知问题,不建议使用。
开发规范建议
PostgreSQL生态的通用最佳实践是所有表名、列名统一使用下划线命名法(比如用sale_date代替saleDate),建表时不要给标识符加双引号,从根源上避免大小写匹配问题。
内容的提问来源于stack exchange,提问作者Paul Harper
相关产品推荐
相关产品推荐

