【问题标题】:Omitting the double quote to do query on PostgreSQL省略双引号以在 PostgreSQL 上进行查询
【发布时间】:2011-09-13 23:04:38
【问题描述】:

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

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

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

【问题讨论】:

    标签: postgresql double-quotes


    【解决方案1】:

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

    使用这个:

    CREATE TABLE a ( ... );
    

    不是这个:

    CREATE TABLE "A" ( ... );
    

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

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

    ALTER TABLE "A" RENAME TO a;
    

    【讨论】:

    • 我用的是建表向导,每次写大写,都会自动加双引号
    • 我从未使用过表格创建向导,但我想软件中有一个选项可以不这样做。在 postgres 中引用表名并不是很常见的做法。它只会让你的生活更加艰难。
    • 当我说“向导”时,它就是pgAdmin III中给出的内容
    • 我明白了。我刚刚检查过,您似乎无法在 pgAdmin 中关闭此功能。我建议在创建时以小写形式输入表名,以便 pgAdmin 认为表名不需要区分大小写。
    • 嗯,"A"a 不一样,当然。但是"a"a 一样吗?而不是“不要使用引号”,我觉得更好的建议是“不要使用大写字母”。
    【解决方案2】:

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

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

    【讨论】:

    • 不错的答案... PostgreSQL 有什么理由这样做(强制我们为大写字母表加上双引号)?
    • 是的,原因是“ANSI标准是这样说的”。
    • 您好,感谢您的评论。有没有办法像 MySQL 那样启用/禁用 ANSI 行为 SET SQL_MODE=ANSI_QUOTES; ? (参考:stackoverflow.com/questions/13884854/…
    【解决方案3】:

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

    仅当标识符(表名、列名等)是用大写字母(部分或全部)在双引号之间定义(在架构创建时)时,才需要在标识符中使用双引号。

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

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

    【讨论】:

    • "...并在不区分大小写的模式下工作"。具体怎么做?
    • @zfm:正如史蒂夫所说。您使用小写(或不带引号 - 这是同一件事)创建标识符,然后您可以在不区分大小写的模式下使用它们(不引用它们)。
    • 对不起,我误解了你的句子。我认为可以选择更改该模式:D
    • @zfm:这句话确实很混乱,我改了。
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      请查看here的详细描述。

      PostgreSQL服务器表名区分大小写,但默认强制为小写:当你输入CREATE TABLE AAA时,查询执行前会变为CREATE TABLE aaa

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

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

      【讨论】:

        猜你喜欢
        • 2023-04-06
        • 2021-02-25
        • 1970-01-01
        • 2019-02-13
        • 1970-01-01
        • 2021-11-11
        • 1970-01-01
        • 1970-01-01
        • 2019-07-05
        相关资源
        最近更新 更多