Postgres 列名或表名什么时候需要引号,什么时候不需要?

Ory*_*sza 8 postgresql quoted-identifier

让我们考虑以下 postgres 查询:

SELECT * 
FROM "MY_TABLE"
WHERE "bool_var"=FALSE 
 AND "str_var"='something';
Run Code Online (Sandbox Code Playgroud)

当我删除周围的引号时,查询无法正确响应,但当我"str_var""bool_var". 为什么?在这种情况下编写查询的正确方法是什么,布尔列周围没有引号,文本列周围没有引号?还有什么?

Kje*_* S. 18

如果您不通过在create table "My_Table_ABC" ( "My_Very_Upper_and_Lowercasy_Column" numeric,...). 如果你有这样的名字,你必须总是在选择和其他引用中双引号这些名字。

我建议不要创建这样的表,也不要在a-z,0-9_. 您不能保证曾经针对您的数据库使用的每个软件、库等都支持区分大小写。记住和执行这种双引号也很乏味。


Ory*_*sza 8

感谢@TimBiegeleisen 的评论,我能够查明问题所在;我使用保留关键字(“user”)作为列名。

链接到文档中的保留关键字: https: //www.postgresql.org/docs/current/sql-keywords-appendix.html

现在我知道不要使用引号来查询列名,而是避免使用保留关键字作为列名。

  • 一般建议确实是永远不要在 SQL 中的标识符周围使用双引号 (2认同)