这个 "t" 是做什么的?

What does this "t" do?

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

它是集合的别名,以便能够在列列表中引用它,例如:

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

您要查找的语法是:

function_call [WITH ORDINALITY] [[AS] table_alias [(column_alias [, ... ])]]

https://www.postgresql.org/docs/10/static/queries-table-expressions.html#QUERIES-TABLEFUNCTIONS

t 是任意 table 别名;你可以给它任何你想要的有效名称。