63

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

这是一个例子,给select * from A;,我会检索ERROR: relation "a" does not exist,我必须给select * from "A";才能得到真正的结果。

有什么办法不做第二个,而是在 PostgreSQL 上做第一个?

4

5 回答 5

90

当您创建表时,您的查询问题就开始了。创建表格时,请勿使用引号。

用这个:

CREATE TABLE a ( ... );

不是这个:

CREATE TABLE "A" ( ... );

后者将使您始终必须在以后引用它。前者使其成为普通名称,您可以使用SELECT * FROM a;SELECT * FROM A;

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

ALTER TABLE "A" RENAME TO a;
于 2011-06-13T14:17:52.227 回答
43

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

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

于 2011-06-13T14:08:36.767 回答
35

Postgresql 在引用和区分大小写方面有一些特殊的行为:它将每个未引用的标识符折叠为小写(也在创建时),然后区分大小写。

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

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

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

于 2011-06-13T14:16:20.260 回答
10

不要在你的表名或列名中使用大写字母,如果你使用这样的东西,那么 postgres 将需要双引号来访问它。

于 2016-01-21T11:51:34.377 回答
3

请参阅此处发生的情况的详细说明。

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

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

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

于 2015-04-14T05:02:38.000 回答