我正在使用 PostgreSQL 数据库。
我有一个 plpgsql FUNCTION
,它返回一个包含任意数量列的 record
。
由于这种任意性,我需要使用类似的东西:
SELECT * FROM my_function(97)
但这不起作用,因为 Postgres 给我以下错误:
a column definition list is required for functions returning "record"
但如果我这样做:
SELECT my_function(97)
我可以看到预期的结果,但封装在一个列中。
有没有办法按照函数的预期将预期结果作为一组列获取,而不是将所有列封装起来?
最佳答案
当函数只是RETURNS record
或SETOF record
(并且没有OUT
参数)时,PostgreSQL 不知道名字及其元素的类型,您需要在每次调用时提供列定义列表。
尽可能避免这种情况,并返回一个众所周知的(行)类型。有几种方法可以声明返回类型。见:
- PostgreSQL: ERROR: 42601: a column definition list is required for functions returning "record"
- Refactor a PL/pgSQL function to return the output of various SELECT queries
SO上有不少相关问题。 Try a search!
关于postgresql - SELECT FROM 返回具有任意列数的记录的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9164031/