我persons
在另一个列名称为的团队的Postgres中有一个db表说"first_Name"
。现在我正试图使用PG命令来查询此列名上的该表。
select * from persons where first_Name="xyz";
它只是返回
错误:列“ first_Name”不存在
不确定我是否在做愚蠢的事情,或者是否有解决此问题的解决方法?
我persons
在另一个列名称为的团队的Postgres中有一个db表说"first_Name"
。现在我正试图使用PG命令来查询此列名上的该表。
select * from persons where first_Name="xyz";
它只是返回
错误:列“ first_Name”不存在
不确定我是否在做愚蠢的事情,或者是否有解决此问题的解决方法?
Answers:
所有未双引号的标识符(包括列名)在PostgreSQL中被折叠为小写。用双引号创建的列名并因此保留了大写字母(和/或其他语法违规),必须在余下的时间将双引号引起来:("first_Name"
)
因此,是的,PostgreSQL列名称区分大小写:
SELECT * FROM persons WHERE "first_Name" = 'xyz';
还要解决不正确的双引号'xyz'
。值(字符串文字)用单引号引起来。
我的长期建议是仅使用合法的小写名称,因此不需要双引号。
foobar
,FOOBAR
和FooBar
是相同的标识符。但是"foobar"
,"FooBar"
和"FOOBAR"
是不同的标识符
foobar
与FOOBAR
相同"FOOBAR"
,在potgresql 等下FOOBAR
与foobar
相同"foobar"
。
引用文档:
关键字和未加引号的标识符不区分大小写。因此:
UPDATE MY_TABLE SET A = 5;
可以等效地写成:
uPDaTE my_TabLE SeT a = 5;
您也可以使用带引号的标识符来编写它:
UPDATE "my_table" SET "a" = 5;
引用标识符使其区分大小写,而未引用的名称总是折叠为小写(与SQL标准不同,未引用的名称折叠为大写)。例如,PostgreSQL认为标识符FOO
,foo
和"foo"
是相同的,但"Foo"
与"FOO"
这三个标识符互不相同。
如果您要编写可移植的应用程序,建议您始终引用一个特定名称,或者永远不要引用该名称。
混合大小写的列名必须在PostgresQL中用双引号引起来。因此,最好的约定是在所有小写字母后加下划线。