Sql postgres:“从用户选择*的查询”实际上在做什么?

Sql postgres:“从用户选择*的查询”实际上在做什么?,sql,postgresql,Sql,Postgresql,在psql中,如果键入“select*from user”,您将返回以下内容: current_user -------------- postgres 此上下文中的用户是什么?在此上下文中,用户是一个保留的内部Postgres函数,表示当前登录到数据库的用户 此查询也可以编写为: 选择用户 这会产生同样的结果。注意,如果您想要实际引用或创建一个名为user的表,您必须使用引号,或者完全限定它所在的模式。例如: CREATE TABLE "user" ( id int2 not nu

在psql中,如果键入“select*from user”,您将返回以下内容:

 current_user 
--------------
 postgres
此上下文中的用户是什么?

在此上下文中,用户是一个保留的内部Postgres函数,表示当前登录到数据库的用户

此查询也可以编写为:

选择用户

这会产生同样的结果。注意,如果您想要实际引用或创建一个名为user的表,您必须使用引号,或者完全限定它所在的模式。例如:

CREATE TABLE "user"
(
  id int2 not null
);
将起作用,但:

CREATE TABLE user
(
  id int2 not null
);
将产生一个错误

以下是其他系统信息功能的参考:


请参阅上的Postgresql文档

基本上,select*from user是Postgresql查找当前用户的特定方法之一。其功能与使用当前用户功能相同,例如:选择当前用户

可在查询中用作表的其他特殊函数包括:

current_catalog
current_schema

如果您正在寻找我应该在pg_用户表中查找的用户列表; 从pg_用户中选择*


您的查询从名为user的特殊函数的结果中获取所有数据。该函数返回当前用户的用户名。

选择用户;返回相同的结果集,并从某个_表中选择用户*;将名为current_user的附加列返回到结果集。所以它的行为对我来说确实很奇怪。虽然同样的行为发生在当前的时间戳上。我猜postgres在如何使用函数方面非常灵活。@MartinSmith:灵活?你能使用SELECT user吗?@KenWhite如果人们没有回答问题,他们就没有回答问题。对此我无能为力。奇怪的是,我对Postgres知之甚少:它是一个内部变量还是一个内部表?user@ypercube的Postgres文档-文档似乎将其称为一个系统信息函数,但其行为更像一个内置变量。也就是说,您不需要在它后面加任何内容,它可以通过SET命令进行更改。@ypercube-感谢您给我一个借口,让我翻阅PG系统数据库进行调查。如果您仍然需要一个非常非常深入的技术解释,我建议您发电子邮件给PG人员,我一直认为他们在postgresql.org的pgsql general网站上非常有帮助。我认为除了不需要括号外,这些函数没有什么特别之处。选择是。e、 g.从版本中选择*;它工作得很好。