我有一个Postgres数据库表格,名字叫做persons
,由另一个团队创建,其中有一个列的名称是"first_Name"
。现在我想使用PG commander在这个列上查询这个表格。
select * from persons where first_Name="xyz";
它只是返回
错误:列“first_Name”不存在
不确定我是否做错了什么或者我错过了解决这个问题的方法?
我有一个Postgres数据库表格,名字叫做persons
,由另一个团队创建,其中有一个列的名称是"first_Name"
。现在我想使用PG commander在这个列上查询这个表格。
select * from persons where first_Name="xyz";
它只是返回
错误:列“first_Name”不存在
不确定我是否做错了什么或者我错过了解决这个问题的方法?
"first_Name" → "first_Name" -- upper-case "N" preserved
"1st_Name" → "1st_Name" -- leading digit preserved
"AND" → "AND" -- reserved word preserved
first_Name → first_name -- upper-case "N" folded to lower-case "n"
1st_Name → Syntax error! -- leading digit
AND → Syntax error! -- reserved word
值(字符串字面常量)用单引号括起来:
'xyz'
SELECT * FROM persons WHERE "first_Name" = 'xyz';
我的一贯建议是只使用合法的小写名称,因此永远不需要使用双引号。
引用文档的原话:
关键字和未加引号的标识符不区分大小写。因此:
UPDATE MY_TABLE SET A = 5;
可以等价地写成:
你还可以使用引用标识符来编写它:
uPDaTE my_TabLE SeT a = 5;
UPDATE "my_table" SET "a" = 5;
引用标识符会使其区分大小写,而未引用的名称总是折叠为小写(与SQL标准不同,SQL标准中未引用的名称折叠为大写)。例如,在PostgreSQL中,标识符
FOO
,foo
和"foo"
被视为相同,但"Foo"
和"FOO"
与这三个标识符以及彼此都不同。如果您想编写可移植应用程序,则建议始终引用特定名称或永远不引用它。
在PostgreSQL中,混合大小写或大写的列名必须用双引号括起来。因此,最好的惯例是使用所有小写加下划线。
如果使用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))";
foobar
、FOOBAR
和FooBar
是相同的标识符。然而,"foobar"
、"FooBar"
和"FOOBAR"
是不同的标识符。 - user330315foobar
和FOOBAR
与"FOOBAR"
相同,在 PostgreSQL 中FOOBAR
和foobar
等与"foobar"
相同。 - Jasen