Postgres 在系统和本地数据库表名称中重叠



我遇到了一个奇怪的问题,我的本地数据库中有一个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;

USER是PostgreSQL的保留关键字之一。它也保留用于 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标准,而忘记必须引用标识符。

相关内容

  • 没有找到相关文章

最新更新