【发布时间】:2011-09-13 23:04:38
【问题描述】:
简单的问题,有没有办法在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;
【讨论】:
pgAdmin III中给出的内容
"A" 与 a 不一样,当然。但是"a" 和a 一样吗?而不是“不要使用引号”,我觉得更好的建议是“不要使用大写字母”。
如果您在 postgres 中的表名中包含大写字母,则需要双引号
为避免要求将您的表命名为“a”
【讨论】:
SET SQL_MODE=ANSI_QUOTES; ? (参考:stackoverflow.com/questions/13884854/…)
Postgresql 在引用和区分大小写方面有一些 particular behaviour:它将每个未引用的标识符折叠为小写(也在创建时),然后区分大小写。
仅当标识符(表名、列名等)是用大写字母(部分或全部)在双引号之间定义(在架构创建时)时,才需要在标识符中使用双引号。
在这种情况下(我不建议这样做),当您使用该标识符时,您必须以相同的方式键入它:区分大小写(完全按照定义键入大写/小写字母)并在双引号之间。
在其他情况下,您可以使用不带引号的标识符并始终不区分大小写。
【讨论】:
不要在你的表名或列名中使用大写字母,如果你使用这样的东西,那么 postgres 将需要双引号来访问它。
【讨论】:
请查看here的详细描述。
PostgreSQL服务器表名区分大小写,但默认强制为小写:当你输入CREATE TABLE AAA时,查询执行前会变为CREATE TABLE aaa。
双引号名称保持原来的大小写,所以在CREATE TABLE "AaA" 之后你会得到AaA 表,并且必须一次又一次地用双引号写它。
不知道他们为什么这样做:)
【讨论】: