El problema es que está pasando un parámetro (db_row
) de tipo record
a una instrucción SQL, pero dicho valor no tiene una estructura conocida para el motor SQL. Ni siquiera puedes convertirlo en el tipo de tabla.
Se me ocurre una solución fea para convertir el registro en su representación de texto (que funciona con una llamada a la función de salida de tipo) y luego convertir la prueba en el tipo de tabla deseado.
Este es un código de muestra que ilustra lo que quiero decir:
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;
$$;