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

问题描述 投票:29回答:5

简单的问题,是否有任何方法可以省略PostgreSQL中的双引号?

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

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

postgresql double-quotes
5个回答
57
投票

您在创建表时开始解决此查询的问题。创建表时,请勿使用引号。

用这个:

CREATE TABLE a ( ... );

不是这个:

CREATE TABLE "A" ( ... );

后者将使它总是必须在以后引用它。前者使其成为正常名称,您可以使用SELECT * FROM a;SELECT * FROM A;

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

ALTER TABLE "A" RENAME TO a;

23
投票

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

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


16
投票

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

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

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

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


3
投票

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


0
投票

请参阅particular behaviour正在发生的事情的详细说明。

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

双引号名称保持原样,所以在CREATE TABLE aaa之后你得到表CREATE TABLE "AaA"并且必须一次又一次地用双引号写。

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

© www.soinside.com 2019 - 2024. All rights reserved.