O problema é que você está passando um parâmetro (
db_row
) do tipo record
a uma instrução SQL, mas esse valor não tem estrutura conhecida para o mecanismo SQL. Você não pode nem convertê-lo para o tipo de tabela. Uma solução feia eu posso pensar nisso para converter o registro em sua representação de texto (que funciona com uma chamada para a função de saída de tipo) e, em seguida, lançar o teste para o tipo de tabela desejado.
Este é um código de exemplo que ilustra o que quero dizer:
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;
$$;