【问题标题】:Is it mandatory to use "" around the table name performing query on PostgreSQL?在 PostgreSQL 上执行查询的表名周围是否必须使用“”?
【发布时间】:2021-11-03 19:14:00
【问题描述】:

我不太喜欢 PostgreSQLpgAdmin 4,我有以下疑问。

以下是我在 pgAdmin4 中看到的截图:

如您所见,它正在执行这个非常简单的查询:

SELECT * FROM public."Example"
ORDER BY id ASC 

我不明白的是,Example 表名前面的 public 名称是什么。这是什么?

我试图以这种方式执行查询,但它不起作用:

SELECT * FROM Example
ORDER BY id ASC 

它给了我一个语法错误。我经常使用 MySql,在 MySql 中它正在工作。

我尝试用这种方式替换查询:

SELECT * FROM "Example"
ORDER BY id ASC 

所以它正在工作。所以这意味着在PosgreSQL数据库中,表名周围的“”是强制性的?

【问题讨论】:

  • public 是表所在的模式。模式限定表名是一个好习惯,因为不同模式中可以有同名的表。有关更多信息,请参阅search_path。至于双引号,请参阅文档中的Identifiers,它将解释一切。短版,如果不想双引号,请使用所有小写名称。
  • public 是架构名称。
  • 听起来你不小心用大写的名字定义了example
  • 如果您使用小写标识符(表、函数、视图等名称),工作量会减少。如果工作越少越好,那么是的,那就更好了。

标签: postgresql quoted-identifier


【解决方案1】:

我不明白的是示例表名前面的这个公共名称是什么。这是什么?

As said in postgres documentation: “默认情况下,表(和其他对象)会自动放入名为“public”的架构中。每个新数据库都包含这样的架构。”

所以这意味着在 PosgreSQL 数据库中,表名周围的“” 是强制性的吗?

并非如此,但如果您使用保留关键字(例如“user”、“name”等)或者如果您的表名包含大写字母(这是您的大小写),则需要使用它。无论如何,在这种情况下,如果可以的话,最好更改表的名称。

【讨论】:

  • 那么使用小写的表格名称更好吗? (作为标准)
  • 是的,您应该遵循约定并使用小写和下划线作为您的表名。如果您有兴趣并想了解有关 Postgres 命名约定的更多信息,可以查看here
【解决方案2】:

你应该将你的表名改为小写字母,然后再试一次

select * from example

【讨论】:

    猜你喜欢
    • 2012-09-21
    • 1970-01-01
    • 2017-12-29
    • 2023-04-03
    • 2017-03-29
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多