我有一个数据库表,在Postgres中是由另一个团队传递的,它的列名是"first_Name"。现在,我尝试使用PG commander在这个列名上查询这个表。
select * from persons where first_Name="xyz";然后它就会返回
错误:列"first_Name“不存在
不确定我是否在做一些愚蠢的事情,或者是否有解决这个问题的方法我错过了?
发布于 2014-01-02 17:53:47
标识符(包括列名)是的,而不是双引号的,在PostgreSQL中会折叠成小写。使用双引号创建并因此保留大写字母(和/或其他语法冲突)的列名在其余生中必须使用双引号:
"first_Name"值(字符串文字/常量)用单引号括起来
'xyz'因此,是的,PostgreSQL列名是区分大小写的(当使用双引号时):
SELECT * FROM persons WHERE "first_Name" = 'xyz';Read the manual on identifiers here.
我的建议是只使用合法的小写名称,这样就不需要双引号了。
发布于 2015-04-27 23:37:39
引用documentation
关键字和未加引号的标识符不区分大小写。因此:
更新MY_TABLE集合A= 5;
可以等效地写成:
uPDaTE my_TabLE SeT a= 5;
您也可以使用带引号的标识符编写它
UPDATE "my_table" SET "a" = 5;引用标识符使其区分大小写,而未加引号的名称始终折叠为小写(与SQL标准中未引用的名称折叠为大写不同)。例如,PostgreSQL认为标识符FOO、foo和"foo"是相同的,但是"Foo"和"FOO"是不同的。
如果你想编写可移植的应用程序,建议你总是引用一个特定的名称,或者永远不要引用它。
发布于 2015-04-28 11:45:47
在PostgresQL中,大小写混合或大写的列名必须用双引号引起来。因此,最好的约定是在所有小写字母后面加上下划线。
https://stackoverflow.com/questions/20878932
复制相似问题