这个“t”是做什么的?

时间:2017-12-01 09:23:23

标签: sql postgresql table-alias

我无法理解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,它仍然有效。

2 个答案:

答案 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