我无法理解PostgreSQL documentation中的以下示例:
-- 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
,它仍然有效。
答案 0 :(得分:4)
您正在寻找的语法是:
function_call [WITH ORDINALITY] [[AS] table_alias [(column_alias [, ... ])]]
https://www.postgresql.org/docs/10/static/queries-table-expressions.html#QUERIES-TABLEFUNCTIONS
t
是一个任意的表别名;你可以给它任何你想要的有效名称。
答案 1 :(得分:1)
它是一个集合的别名,能够在列列表中引用它,例如:
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