0

レコードタイプを返す関数があります:

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

この関数は、ブール値とテキストの 2 つの属性を持つレコードを返します。これは、select クエリで取得できます。

  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 に答える