12

让我们考虑以下 postgres 查询:

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

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

4

2 回答 2

28

如果您不通过在create table "My_Table_ABC" ( "My_Very_Upper_and_Lowercasy_Column" numeric,...). 如果您有这样的名称,则必须始终在选择和其他引用中对这些名称进行双引号。

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

于 2019-03-22T10:46:19.897 回答
3

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

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

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

于 2019-03-22T12:21:21.627 回答