Postgres 列或 table 名称何时需要引号,何时不需要?

When do Postgres column or table names need quotes and when don't they?

让我们考虑以下 postgres 查询:

SELECT * 
FROM "MY_TABLE"
WHERE "bool_var"=FALSE 
 AND "str_var"='something';

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

PostgreSQL 将所有名称(table 名称、列名称等)转换为小写,如果您不通过在 create table "My_Table_ABC" ( "My_Very_Upper_and_Lowercasy_Column" numeric,...) 中双引号来阻止它们的话。如果你有这样的名字,你必须始终在选择和其他引用中用双引号引用这些名字。

我建议不要像这样创建 table,也不要在 a-z0-9_ 之外使用字符。您不能保证针对您的数据库使用的每个软件、库等都支持区分大小写。记住并执行此双引号也很乏味。

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

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

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