PostgreSQL列名是否区分大小写?
我有一个数据库表,说Postgres的persons
有一个列名称,说: "first_Name"
的另一个团队传下来。 现在我试图用PG命令来查询这个列名的这个表。
select * from persons where first_Name="xyz";
它只是返回
错误:列“first_Name”不存在
不知道我是在做一些愚蠢的事情还是有解决这个问题的方法,我失踪了?
所有没有双引号的标识符(包括列名)在PostgreSQL中被折叠为小写。 使用双引号创build的列名因此保留大写字母(和/或其他语法违规)必须在其余的时间用双引号引起来。 所以, 是的 ,PostgreSQL列名是区分大小写的:
SELECT * FROM persons WHERE "first_Name" = 'xyz';
同时修复'xyz'
周围不正确的双引号。 值(string文字)用单引号引起来 。
在这里阅读手册。
我的build议是只使用合法的小写字母,因此不需要双引号。
引用文档 :
关键词和未加引号的标识符是不区分大小写的。 因此:
UPDATE MY_TABLE SET A = 5;
可以等价写成:
uPDaTE my_TabLE SeT a = 5;
引用标识符使其区分大小写,而未加引号的名称总是折叠为小写:
UPDATE "my_table" SET "a" = 5; // equivalent to the above examples
大小写混合的列名必须在postgres sql中双引号。 所以最好的约定是遵循所有小写与下划线。