PostgreSQL列名是否区分大小写?

vddsk6oq  于 2022-09-21  发布在  PostgreSQL
关注(0)|答案(4)|浏览(175)

我有一个数据库表,名为persons的postgres是由另一个团队传递的,它的列名为"first_Name"。现在,我尝试使用PG COMMANDER在这个列名上查询这个表。

select * from persons where first_Name="xyz";

然后它就回来了

错误:列“first_name”不存在

不确定我是否在做一些愚蠢的事情,或者我错过了这个问题的解决方法?

anauzrmj

anauzrmj1#

在PostgreSQL中,双引号标识**(包括列名)会折叠成小写。使用双引号创建并因此保留大写字母(和/或其他语法违规)的列名在其余生中必须使用双引号:

"first_Name"

(字符串型/常量)用单引号引起来

'xyz'

因此,YES,PostgreSQL列名区分大小写(双引号时):

SELECT * FROM persons WHERE "first_Name" = 'xyz';

在这里阅读有关识别符的手册。

我的长期建议是,只使用合法的小写名称,这样就不需要双引号了。

093gszye

093gszye2#

引用文档:
关键字和无引号的标识符不区分大小写。因此:

UPDATE MY_TABLE SET A = 5;

可以等效地写成:

uPDaTE my_TabLE SeT a = 5;

您也可以使用带引号的标识符来编写它:

UPDATE "my_table" SET "a" = 5;

引用标识符使其区分大小写,而未引用的名称始终折叠为小写(不同于SQL标准,未引用的名称折叠为大写)。例如,PostgreSQL认为标识符FOOfoo"foo"是相同的,但"Foo""FOO"是不同的。

如果您想要编写可移植的应用程序,建议您始终引用某个特定的名称,或者永远不要引用它。

g2ieeal7

g2ieeal73#

在PostgreSQL中,大小写混合或大写的列名必须用双引号引起来。因此,最好的惯例是在所有小写字母后面加下划线。

0sgqnhkj

0sgqnhkj4#

如果使用JPA,我建议您更改为小写模式、表和列名,您可以使用下面的说明来帮助您:

select
    psat.schemaname,
    psat.relname,
    pa.attname,
    psat.relid
from
    pg_catalog.pg_stat_all_tables psat,
    pg_catalog.pg_attribute pa
where
    psat.relid = pa.attrelid

更改架构名称:

ALTER SCHEMA "XXXXX" RENAME TO xxxxx;

更改表名称:

ALTER TABLE xxxxx."AAAAA" RENAME TO aaaaa;

更改列名:

ALTER TABLE xxxxx.aaaaa RENAME COLUMN "CCCCC" TO ccccc;

相关问题