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



让我们考虑以下postgres查询:

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

当我在"str_var"周围删除引号时,查询无法正常响应,但是当我围绕"bool_var"进行相同操作时。为什么?在这种情况下,编写查询的正确方法是什么,在布尔列周围没有引号和文本列周围的引号?其他?

postgresql如果您不通过在 create table "My_Table_ABC" ( "My_Very_Upper_and_Lowercasy_Column" numeric,...)中引用它们来阻止它们,则将所有名称(表名,列名等)转换为小写。如果您有这样的名称,则必须始终在Selects和其他参考文献中加倍引用这些名称。

我建议不要创建这样的表,也不要使用a-z0-9_之外的字符。您不能保证要针对数据库使用的每个软件,库等都会支持病例敏感性。记住和做这倍言也很乏味。

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

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

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

最新更新