PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

postgresql, nie można zidentyfikować kolumny w typie danych rekordu

Problem polega na tym, że przekazujesz parametr (db_row ) typu record do instrukcji SQL, ale taka wartość nie ma znanej struktury dla silnika SQL. Nie możesz nawet przesłać go do typu tabeli.

Jedno brzydkie obejście, jakie mogę sobie wyobrazić, polega na rzuceniu rekordu na jego reprezentację tekstową (co działa z wywołaniem funkcji wyjściowej typu), a następnie rzuceniu testu na żądany typ tabeli.

Oto przykładowy kod, który ilustruje, o co mi chodzi:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Rails 5 Wstrzyknięcie SQL

  2. Czy możesz utworzyć sekwencję na kolumnie, która już istnieje w Postgresie?

  3. Nie można zaimportować do bazy postgres heroku ze zrzutu

  4. Rekord aktywny:Zapytanie JSON

  5. PostgreSQL - zapytanie o indeks GIN o wartości HSTORE