PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

postgresql, non è stato possibile identificare la colonna nel tipo di dati del record

Il problema è che stai passando un parametro (db_row ) di tipo record a un'istruzione SQL, ma tale valore non ha una struttura nota per il motore SQL. Non puoi nemmeno trasmetterlo al tipo di tabella.

Mi viene in mente una brutta soluzione alternativa per eseguire il cast del record nella sua rappresentazione testuale (che funziona con una chiamata alla funzione di output del tipo) e quindi eseguire il cast del test sul tipo di tabella desiderato.

Questo è un codice di esempio che illustra cosa intendo:

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;
$$;