Problemet är att du skickar en parameter (db_row
) av typen record
till en SQL-sats, men ett sådant värde har ingen känd struktur för SQL-motorn. Du kan inte ens casta den till tabelltypen.
En ful lösning jag kan tänka mig att casta posten till dess textrepresentation (som fungerar med ett anrop till typutgångsfunktionen) och sedan kasta testet till önskad tabelltyp.
Detta är exempelkod som illustrerar vad jag menar:
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;
$$;