4

我无法理解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任何其他标识符替换,它仍然有效。

4

2 回答 2

4

您正在寻找的语法是:

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

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

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

于 2017-12-01T09:32:23.770 回答
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
于 2017-12-01T09:31:57.197 回答