【问题标题】:In PostgreSQL how do I create a function that returns an actual table? [duplicate]在 PostgreSQL 中,如何创建一个返回实际表的函数? [复制]
【发布时间】: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?

标签: postgresql plpgsql postgresql-9.4


【解决方案1】:

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

代替:

SELECT cols('test');

使用

SELECT * FROM cols('test');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-21
    • 2016-10-12
    • 2023-01-08
    • 2011-02-19
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    • 2022-07-07
    相关资源
    最近更新 更多