这个问题意味着双引号,当用于强制 PostgreSQL 识别标识符名称的大小写时,实际上成为标识符名称的一部分。这是不正确的。确实发生的情况是,如果您使用双引号强制大小写,那么您必须始终使用双引号来引用该标识符。
背景:
在 PostgreSQL 中,标识符的名称总是折叠为小写,除非您用双引号将标识符名称括起来。这可能会导致混乱。
考虑一下如果按顺序运行这两个语句会发生什么:
CREATE TABLE my_table (
t_id serial,
some_value text
);
这将创建一个名为my_table
.
现在,尝试运行:
CREATE TABLE My_Table (
t_id serial,
some_value text
);
PostgreSQL 忽略大写(因为表名没有被引号包围)并尝试创建另一个名为my_table
. 发生这种情况时,它会引发错误:
ERROR: relation "my_table" already exists
要使用大写字母制作表格,您必须运行:
CREATE TABLE "My_Table" (
t_id serial,
some_value text
);
现在您的数据库中有两个表:
Schema | Name | Type | Owner
--------+---------------------------+-------+----------
public | My_Table | table | postgres
public | my_table | table | postgres
唯一的访问方法My_Table
是用双引号将标识符名称括起来,如下所示:
SELECT * FROM "My_Table"
如果您不加引号,那么 PostgreSQL 会将其折叠为小写并查询my_table
。