0

我遇到了一个奇怪的问题,我的本地数据库中有一个表,当我尝试使用 Postico 运行 SQL 查询时user,它似乎与 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;
4

1 回答 1

1

USERPostgreSQL的保留 关键字之一。它也为 SQL 2011、2008 和 92 保留。

从文档中:

SQL 区分保留关键字和非保留关键字。根据标准,保留关键字是唯一真正的关键字;它们绝不允许作为标识符。

强调我的

也就是说,如果你想避免麻烦,不要user用作标识符(即:它不应该是表名,或列名,或索引,或约束,或函数,.. .)。

如果你还想尝试:

作为一般规则,如果您对包含任何列出的关键字作为标识符的命令产生虚假的解析器错误,您应该尝试引用标识符以查看问题是否消失。

也就是说,尝试:

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 标准,并且忘记必须引用标识符。

于 2017-08-06T17:56:04.963 回答