PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

postgresql, konnte Spalte im Datensatzdatentyp nicht identifizieren

Das Problem ist, dass Sie einen Parameter übergeben (db_row ) vom Typ record zu einer SQL-Anweisung, aber ein solcher Wert hat keine bekannte Struktur für die SQL-Engine. Sie können es nicht einmal in den Tabellentyp umwandeln.

Eine hässliche Problemumgehung, die mir einfällt, besteht darin, den Datensatz in seine Textdarstellung umzuwandeln (was mit einem Aufruf der Typausgabefunktion funktioniert) und dann den Test in den gewünschten Tabellentyp umzuwandeln.

Dies ist Beispielcode, der veranschaulicht, was ich meine:

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