Проблемът е, че предавате параметър (db_row
) от тип record
към SQL оператор, но такава стойност няма известна структура за SQL машината. Не можете дори да го преобразувате към типа таблица.
Едно грозно решение, за което мога да се сетя, е да прехвърлям записа към неговото текстово представяне (което работи с извикване на функцията за извеждане на типа) и след това да прехвърлям теста към желания тип таблица.
Това е примерен код, който илюстрира какво имам предвид:
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;
$$;