在 PostgreSQL 中,我如何创建一个 returns 实际 table 的函数?

In PostgreSQL how do I create a function that returns an actual table?

在 PostgreSQL 中,我如何创建一个 returns 实际 table 的函数?

例如,如果我有以下功能:

CREATE OR REPLACE FUNCTION cols(_table_name TEXT)
RETURNS TABLE (column_name TEXT,
               data_type TEXT) AS
$$

SELECT column_name,
       data_type
FROM information_schema.columns
WHERE table_name = _table_name
ORDER BY column_name
;

$$ LANGUAGE sql;

以及以下 table:

CREATE TABLE test (a TEXT, b INTEGER, c NUMERIC);

如果我 运行 SELECT cols('test'); 我得到:

    cols
-------------
 (a,text)
 (b,integer)
 (c,numeric)
(3 rows)

但我希望能够得到:

 column_name | data_type
-------------+-----------
 a           | text
 b           | integer
 c           | numeric
(3 rows)

这个函数很好,就是你调用它的方式。

而不是:

SELECT cols('test');

使用

SELECT * FROM cols('test');