Postgres: что делает запрос "select * from user" на самом деле?

В psql, если один из них "выбирает * от пользователя", вы получите что-то вроде следующего:

 current_user 
--------------
 postgres

Что такое пользователь в этом контексте?

Ответ 1

В этом контексте user представляет собой зарезервированную внутреннюю функцию Postgres, которая представляет текущего пользователя, зарегистрированного в базе данных.

Этот запрос также может быть записан как:

SELECT user;

Что должно дать то же самое. Обратите внимание: если вы хотите на самом деле ссылаться или создавать таблицу с именем user, вам придется использовать кавычки или полностью квалифицировать схему, в которой он живет. Например:

CREATE TABLE "user"
(
  id int2 not null
);

будет работать, но:

CREATE TABLE user
(
  id int2 not null
);

Выдает ошибку.

Здесь приведена ссылка для других функций системной информации:

http://www.postgresql.org/docs/9.0/static/functions-info.html

Ответ 2

Смотрите документацию Postgresql на системные функции.

В принципе "select * from user" является одним из способов поиска текущего пользователя в Postgresql. Он функционально аналогичен использованию функции current_user, например: "select current_user()".

Другие специальные функции, которые могут использоваться в качестве таблиц в запросах, включают в себя:

current_catalog
current_schema

Ответ 3

Если вы ищете список пользователей, которых я должен искать в таблице pg_user; SELECT * FROM pg_user;

Ваш запрос получает все данные из результата специальной функции с именем user. Эта функция возвращает имя пользователя current_user.