在PostgreSQL的Select查询中,完全限定的表名是什么?

3

这是一个简单的问题,但谷歌无法在合理的时间内提供帮助。 好的,我有一个名为my_db的数据库中的user表,其中包含id列。 我想运行一个非常简单的查询。

SELECT id FROM user;

但是它失败了。

错误:列“id”不存在 第1行:SELECT id FROM user;

你能想象吗?

好的,正在运行。

SELECT * FROM user;

输出内部postgresql数据库用户列表,这与我的用户无关,它是从完全不同的[内部]数据库中获取的数据。 然而,与my_db建立了连接。


请将您的评论作为答案,这样我就可以将其选为解决方案。 - Nusrat Nuriyev
2个回答

7

user 是一个内部函数(也是一个保留字),用于返回当前登录的用户。

如果你想将其作为自己的标识符使用,需要加上引号:

select id 
from "user" 

或者
select id 
from public."user". 

不过,你应该避免使用保留字作为表名(或任何需要引用标识符的名称)。


4
以下查询可以重写为:
SELECT id FROM my_db.public.user;

当你需要不重命名表名时,可以使用以下语句: SELECT * FROM public.user WHERE id = 1; 这里的id是列名,my_db是数据库名称,user是表名,public代表模式。关于模式的更多信息请查看: http://www.postgresql.org/docs/9.1/static/ddl-schemas.html


5
由于你无法进行跨数据库查询,所以无需包含当前数据库名称。 - user330315

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接