カスタムタイプを作成しました
CREATE TYPE rc_test_type AS (a1 bigint);
と関数
CREATE OR REPLACE FUNCTION public.rc_test_type_function(test_table character varying, dummy integer)
  RETURNS rc_test_type AS
$BODY$ 
    DECLARE
    ret rc_test_type;
    query  text;
    BEGIN
    query := 'SELECT count(*) from '  || test_table    ;
    EXECUTE query into ret.a1;  
    RETURN ret;
END $BODY$
  LANGUAGE plpgsql VOLATILE
私が走れば
SELECT * FROM rc_test_type_function('some_table', 1);
私は得る
"a1"
1389
ここまでは順調ですね。
私が走れば
SELECT p FROM (SELECT rc_test_type_function('some_table', s.step) AS p 
FROM  some_other_table s) foo;
私は得る
"p"
"(1389)"
"(1389)"
「some_other_table」には 2 つのレコードしかないためです。罰金。
しかし、私が試してみると
SELECT p.a1 FROM (select rc_test_type_function('some_table', s.step) AS p
FROM some_other_table s) foo;
エラーが発生します
テーブル »p« のサブクエリに FROM 句のエントリがありません
サブクエリが変更されていないので、これは奇妙だと思います。
2 つの質問:
- 誰が何が起こっているのか説明できますか?
- a1返された配列からフィールド値を抽出するにはどうすればよいですか?