Le problème est que vous passez un paramètre (db_row
) de type record
à une instruction SQL, mais une telle valeur n'a pas de structure connue pour le moteur SQL. Vous ne pouvez même pas le convertir en type table.
Une solution de contournement laide à laquelle je peux penser consiste à convertir l'enregistrement en sa représentation textuelle (qui fonctionne avec un appel à la fonction de sortie de type), puis à convertir le test en type de table souhaité.
Voici un exemple de code qui illustre ce que je veux dire :
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;
$$;