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

zfm*_*zfm 36 postgresql double-quotes

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

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

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

Ste*_*ice 61

创建表时,您的问题就出现了.创建表时,请勿使用引号.

用这个:

CREATE TABLE a ( ... );
Run Code Online (Sandbox Code Playgroud)

不是这个:

CREATE TABLE "A" ( ... );
Run Code Online (Sandbox Code Playgroud)

后者将使它总是必须在以后引用它.前者使它成为普通名称,你可以使用SELECT * FROM a;SELECT * FROM A;

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

ALTER TABLE "A" RENAME TO a;
Run Code Online (Sandbox Code Playgroud)

  • 我使用表创建器向导,每次用大写字母编写时,它都会自动添加双引号 (6认同)
  • 我知道了.我刚检查过,看来你无法在pgAdmin中关闭此功能.我建议在创建时以小写字母键入表名,以便pgAdmin不认为表名需要区分大小写. (4认同)
  • 我从来没有使用过表创建者向导,但我想在软件中有一个选项可以不这样做.在postgres中引用表名称并不是一种非常常见的做法.它只会让你的生活更加艰难. (3认同)
  • 当我说“向导”时,它是`pgAdmin III`中给出的 (2认同)

Dav*_*han 25

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

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

  • 是的,原因是"ANSI标准这样说". (9认同)
  • 很好的答案...... PostgreSQL有没有理由这样做(迫使我们把双引号放到大写字母表中)? (3认同)

leo*_*loy 19

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

只有在定义了表名(或字段名或其他)时(在模式创建时),才需要标识符中的双引号:

  • 用大写字母(部分或全部)
  • 带引号

在那种情况下(我建议反对),在查询中引用它时必须执行以下操作:

  • 区分大小写(完全按照定义键入大写/小写字母)
  • 使用引号

在其他情况下,您可以使用非带引号的标识符(当然,除非他们需要它们)并且始终不区分大小写.


San*_*ndy 8

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


Kar*_*ory 5

请参阅此处发生的情况的详细描述

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

双引号名称保持原来的大小写,因此在CREATE TABLE "AaA"获得表格后AaA后必须一次又一次地用双引号将其写入。

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