Что это "т" делает?
У меня проблемы с пониманием следующего примера из документации PostgreSQL:
-- set returning function WITH ORDINALITY
SELECT * FROM pg_ls_dir('.') WITH ORDINALITY AS t(ls,n);
ls | n
-----------------+----
pg_serial | 1
pg_twophase | 2
postmaster.opts | 3
pg_notify | 4
...
Вещи в скобках t(...)
стать именами столбцов, но что такое t
сам? Я спрашиваю здесь, потому что документы не объясняют это, а однобуквенная функция не гуглится. На самом деле, документы даже не объясняют, что должно произойти после AS
; единственное, что мы получаем, это один пример.
Кажется, я могу заменить t
любым другим идентификатором, и он все еще работает.
2 ответа
Решение
Синтаксис, который вы ищете:
function_call [WITH ORDINALITY] [[AS] table_alias [(column_alias [, ... ])]]
https://www.postgresql.org/docs/10/static/queries-table-expressions.html
t
произвольный псевдоним таблицы; Вы можете дать ему любое допустимое имя.
Это псевдоним для набора, чтобы иметь возможность ссылаться на него в списке столбцов, например:
SELECT t.*,pg_database .datname
FROM pg_ls_dir('.') WITH ORDINALITY AS t(ls,n)
join pg_database on true where datname = 'postgres'
ls | n | datname
----------------------+----+----------
pg_dynshmem | 1 | postgres
postmaster.pid | 2 | postgres
PG_VERSION | 3 | postgres
base | 4 | postgres