Problemet er, at du sender en parameter (db_row
) af typen record
til en SQL-sætning, men en sådan værdi har ingen kendt struktur for SQL-motoren. Du kan ikke engang caste det til tabeltypen.
En grim løsning, jeg kan komme i tanke om, at caste posten til dens tekstrepræsentation (som fungerer med et kald til type output-funktionen) og derefter caste testen til den ønskede tabeltype.
Dette er eksempelkode, der illustrerer, hvad jeg mener:
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;
$$;