省略双引号来对PostgreSQL进行查询

时间:2011-06-13 14:05:30

标签: postgresql double-quotes

简单的问题,有没有办法省略PostgreSQL中的双引号?

以下是一个示例,提供select * from A;,我将检索ERROR: relation "a" does not exist,并且我必须提供select * from "A";才能获得真实结果。

有没有办法不做第二次而是在PostgreSQL上做第一次?

5 个答案:

答案 0 :(得分:54)

您在创建表时启动了此查询的问题。创建表时,请勿使用引号。

使用此:

CREATE TABLE a ( ... );

不是这个:

CREATE TABLE "A" ( ... );

后者会使你以后总是引用它。前者使其成为普通名称,您可以使用SELECT * FROM a;SELECT * FROM A;

如果您不能只是重新创建表格,请使用ALTER TABLE语法:

ALTER TABLE "A" RENAME TO a;

答案 1 :(得分:22)

如果在postgres中的表名中包含大写字母,则需要双引号

要避免要求将表命名为“a”

答案 2 :(得分:14)

Postgresql在引用和案例情感方面有一些particular behaviour:它将每个未引用的标识符折叠为小写(也在创建时),然后以区分大小写的方式工作。

只有在使用大写字母(部分或全部)和双引号定义标识符(表格名称,列名称等)时(在模式创建时),才需要标识符中的双引号。

在这种情况下(我建议反对),当您使用该标识符时,必须以相同的方式键入它:区分大小写(完全按照定义键入大写/小写字母)和双引号之间。

在其他情况下,您可以使用非带引号的标识符,并且始终不区分大小写。

答案 3 :(得分:3)

请勿在表名中使用大写字母或其列名,如果您使用此类内容,则postgres将需要双引号才能访问它。

答案 4 :(得分:0)

请参阅正在发生的事情的详细说明here

PostgreSQL服务器表名称区分大小写,但默认情况下强制为小写:当您键入CREATE TABLE AAA时,它将在查询执行之前变为CREATE TABLE aaa

双引号名称保持原样,因此在CREATE TABLE "AaA"之后您获得表格AaA并且必须一次又一次地双重引用。

不知道他们为什么这样做:)