問題は、パラメータ(db_row
)を渡していることです。 )タイプrecord
SQLステートメントに変換しますが、そのような値にはSQLエンジンの既知の構造がありません。テーブルタイプにキャストすることもできません。
醜い回避策の1つは、レコードをテキスト表現にキャストし(type output関数の呼び出しで機能します)、テストを目的のテーブルタイプにキャストすることです。
これは私が何を意味するかを説明するサンプルコードです:
DO $$
DECLARE
r record;
n name;
BEGIN
/* find all tables with a column "oid" */
FOR r IN
SELECT t.*
FROM pg_class t
JOIN pg_attribute a ON a.attrelid = t.oid
WHERE a.attname = 'oid'
LOOP
/* get the table name */
EXECUTE format(
'SELECT ($1::text::%s).relname',
'pg_class'
) INTO n USING r;
RAISE NOTICE 'Table name: %', n;
END LOOP;
END;
$$;