我遇到了一个奇怪的问题,我在本地数据库中有一个user
表,当我尝试使用Postico运行SQL查询时,它似乎与postgres系统表user
重叠。当我对我的数据库运行查询时,我返回了一个current_user
列,该列映射到访问数据库的用户名。我应该将SQL更改为指向本地数据库用户表?
我试图运行的SQL命令:
SELECT *
FROM user
;
已退回current_user: johndoe
UPDATE user
SET user.password = 'cryptopw', user.authentication_token = NULL
WHERE user.user_id = 210;
答案 0 :(得分:1)
USER
是保留 key words for PostgreSQL之一。它也保留给SQL 2011,2008和92.
来自文档:
SQL区分保留和非保留关键字。根据标准,保留关键词是唯一真正的关键词;它们永远不会被允许作为标识符。
强调我的
也就是说,如果您想避免麻烦,请不要使用user
作为标识符(即:它不应该是表的名称,列,索引,或者约束,或函数,...)。
如果你还想尝试:
作为一般规则,如果您为包含任何列出的关键字作为标识符的命令出现虚假解析器错误,您应该尝试引用标识符以查看问题是否消失。 / p>
即尝试:
SELECT
*
FROM
"user" ;
和
UPDATE
"user"
SET
password = 'cryptopw', -- not "user".password
authentication_token = NULL -- not "user". authentication_token
WHERE
"user".user_id = 210; -- you can, but don't need "user"
我实际上会重命名该表,将其称为my_user
(或application_user
或其他内容),遵循SQL标准,并忘记必须引用标识符。