我有一个db表,Postgres中由另一个团队传下来的人有一个列名,比如“first_Name”。现在我正在尝试使用PG命令来查询这个列名上的表。
select * from persons where first_Name="xyz";
然后它就返回了
错误:first_Name列不存在
不确定我是否在做一些愚蠢的事情,或者是否有一个解决我错过的问题的方法?
我有一个db表,Postgres中由另一个团队传下来的人有一个列名,比如“first_Name”。现在我正在尝试使用PG命令来查询这个列名上的表。
select * from persons where first_Name="xyz";
然后它就返回了
错误:first_Name列不存在
不确定我是否在做一些愚蠢的事情,或者是否有一个解决我错过的问题的方法?
在PostgreSQL中,非双引号的标识符(包括列名)被折叠成小写。使用双引号创建并因此保留大写字母(和/或其他语法违规)的列名必须在其余生中使用双引号:
"first_Name"
值(字符串字面量/常量)用单引号括起来:
'xyz'
所以,是的,PostgreSQL列名是区分大小写的(当双引号时):
SELECT * FROM persons WHERE "first_Name" = 'xyz';
在这里阅读关于标识符的手册。
我的一贯建议是只使用合法的小写名字,这样就不需要双引号了。
引用文件:
关键字和不带引号的标识符不区分大小写。因此: 更新my_table set a = 5 可以等价地写成: SeT my_TabLE = 5;
你也可以用带引号的标识符来写:
UPDATE "my_table" SET "a" = 5;
引用标识符使其区分大小写,而不带引号的名称总是折叠成小写(不像SQL标准中不带引号的名称折叠成大写)。例如,标识符FOO, FOO和"FOO"被PostgreSQL认为是相同的,但"FOO"和"FOO"与这三个和彼此不同。
如果你想要编写可移植的应用程序,建议你总是引用一个特定的名字,或者永远不要引用它。
如果使用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;
您可以尝试用大写字母命名表和列。(postgresql)
//Sql;
create table "Test"
(
"ID" integer,
"NAME" varchar(255)
)
//C#
string sqlCommand = $@"create table ""TestTable"" (
""ID"" integer GENERATED BY DEFAULT AS IDENTITY primary key,
""ExampleProperty"" boolean,
""ColumnName"" varchar(255))";