在 PostgreSQL 中,如何创建一个返回实际表的函数? [复制]

Posted

技术标签:

【中文标题】在 PostgreSQL 中,如何创建一个返回实际表的函数? [复制]【英文标题】:In PostgreSQL how do I create a function that returns an actual table? [duplicate] 【发布时间】:2016-06-23 02:18:22 【问题描述】:

在 PostgreSQL 中如何创建一个返回实际表的函数?

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

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;

还有下表:

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)

【问题讨论】:

@jdigital 这确实解决了我的问题,但我仍然不知道它是否完全回答了我的问题。还有,你是怎么发现的?因为我在 Google 和 SO 上进行了搜索,并且仔细查看了类似问题的链接。 我在谷歌上搜索了“postgres 返回表”。我对此并不熟悉,想了解更多。 也许这将有助于解决您的其余问题:您正在执行没有 FROM 的 SELECT,请参见此处:What does a SELECT statement without FROM used for? 【参考方案1】:

函数没问题,就是你调用它的方式。

代替:

SELECT cols('test');

使用

SELECT * FROM cols('test');

【讨论】:

以上是关于在 PostgreSQL 中,如何创建一个返回实际表的函数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何创建一个结构连接行作为嵌套文档 PostgreSQL

如何创建 PostgreSQL db-f1-micro 实例?

如何删除或更改postgresql上的cakephp分页计数查询?

如何在 PostgreSQL 中返回记录数

如何在 PostgreSQL 中合并两个查询?

在 PostgreSQL 中返回表的用户定义函数