Problém je v tom, že předáváte parametr (db_row
) typu record
k příkazu SQL, ale taková hodnota nemá žádnou známou strukturu pro stroj SQL. Nemůžete to ani přenést na typ tabulky.
Jedno ošklivé řešení, které mě napadá, přetypovat záznam do textové reprezentace (které funguje s voláním funkce výstupu typu) a poté přenést test na požadovaný typ tabulky.
Toto je ukázkový kód, který ilustruje, co mám na mysli:
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;
$$;