0

我有一个返回记录类型的函数:

  CREATE OR REPLACE FUNCTION 
          a()
          RETURNS record AS '$lib/lib', 'a'
          LANGUAGE C VOLATILE STRICT COST 1;

该函数返回具有两个属性的记录:布尔值和文本,我可以使用选择查询检索它们:

  SELECT status, log 
  FROM a() as (status boolean, log text);

是否有可能以某种方式访问​​记录的元素而不在 的帮助下转换它们as (status, log)?像a()[0]a()[1]

4

2 回答 2

2

您可以在创建函数时指定列名。您应该将函数创建为返回表:

CREATE OR REPLACE FUNCTION 
      a()
      RETURNS table(status boolean, log text) AS '$lib/lib', 'a'
      LANGUAGE C VOLATILE STRICT COST 1;

然后可以在调用它时使用这些列名。

你可以称之为:

select status, log
from a()

该函数“知道”列名是什么。

于 2013-06-19T13:10:43.930 回答
1

好吧,您可以将它们都转换为文本,并从中创建一个数组,但我认为这不是您要查找的内容:

with q as (
    select array[ status::text, log ] as x from a() as (status bool, log text)
)
select x[1], x[2] from q;
于 2013-06-19T13:10:27.943 回答