简单的问题,有没有办法省略PostgreSQL中的双引号?
以下是一个示例,提供select * from A;
,我将检索ERROR: relation "a" does not exist
,并且我必须提供select * from "A";
才能获得真实结果。
有没有办法不做第二次而是在PostgreSQL上做第一次?
答案 0 :(得分:54)
您在创建表时启动了此查询的问题。创建表时,请勿使用引号。
使用此:
CREATE TABLE a ( ... );
不是这个:
CREATE TABLE "A" ( ... );
后者会使你以后总是引用它。前者使其成为普通名称,您可以使用SELECT * FROM a;
或SELECT * FROM A;
如果您不能只是重新创建表格,请使用ALTER TABLE
语法:
ALTER TABLE "A" RENAME TO a;
答案 1 :(得分:22)
要避免要求将表命名为“a”
答案 2 :(得分:14)
Postgresql在引用和案例情感方面有一些particular behaviour:它将每个未引用的标识符折叠为小写(也在创建时),然后以区分大小写的方式工作。
只有在使用大写字母(部分或全部)和双引号定义标识符(表格名称,列名称等)时(在模式创建时),才需要标识符中的双引号。
在这种情况下(我建议反对),当您使用该标识符时,必须以相同的方式键入它:区分大小写(完全按照定义键入大写/小写字母)和双引号之间。
在其他情况下,您可以使用非带引号的标识符,并且始终不区分大小写。
答案 3 :(得分:3)
请勿在表名中使用大写字母或其列名,如果您使用此类内容,则postgres将需要双引号才能访问它。
答案 4 :(得分:0)
请参阅正在发生的事情的详细说明here。
PostgreSQL服务器表名称区分大小写,但默认情况下强制为小写:当您键入CREATE TABLE AAA
时,它将在查询执行之前变为CREATE TABLE aaa
。
双引号名称保持原样,因此在CREATE TABLE "AaA"
之后您获得表格AaA
并且必须一次又一次地双重引用。
不知道他们为什么这样做:)