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