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

postgresql, kunne ikke identificere kolonne i postdatatypen

Problemet er, at du sender en parameter (db_row ) af typen record til en SQL-sætning, men en sådan værdi har ingen kendt struktur for SQL-motoren. Du kan ikke engang caste det til tabeltypen.

En grim løsning, jeg kan komme i tanke om, at caste posten til dens tekstrepræsentation (som fungerer med et kald til type output-funktionen) og derefter caste testen til den ønskede tabeltype.

Dette er eksempelkode, der illustrerer, hvad jeg mener:

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



  1. UTF-8-kompatibel trunkeringsfunktion

  2. Oracle Database-ændringsmeddelelse

  3. PHP / SQL, enkelt vælg hvor får værdien som kolonne

  4. jQuery opdatering div i det øjeblik en tabel opdateres