Het probleem is dat u een parameter doorgeeft (db_row
) van het type record
naar een SQL-instructie, maar een dergelijke waarde heeft geen bekende structuur voor de SQL-engine. Je kunt het niet eens casten naar het tafeltype.
Een lelijke oplossing die ik kan bedenken om het record naar zijn tekstrepresentatie te casten (die werkt met een aanroep naar de type-uitvoerfunctie) en vervolgens de test naar het gewenste tabeltype te casten.
Dit is voorbeeldcode die illustreert wat ik bedoel:
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;
$$;