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

PostgreSQL:Jak zwrócić dynamiczne wiersze z tabeli bez używania listy definicji kolumn?

Obsługa anyelement jako typ zwracany jest opisany w Typy polimorficzne :

Ten argument w twoim przypadku to relation_name wpisany jako anyelement i przekazując NULL::table1 , to rzeczywiście informuje planistę, że to konkretne wywołanie function1 powinien zwrócić SETOF table1 . Jak dotąd tak dobrze.

Problem polega na tym, że po wykonaniu funkcja nie zwraca SETOF table1 ale coś innego. Nie tego oczekiwał wykonawca, stąd błąd.

Mimo że tytuł pytania brzmi Jak zwrócić dynamiczne wiersze... , wydaje się, że potrzebujesz dynamicznych kolumn lub polimorficznych zestawów wyników.

A to jest podjazdowa walka z SQL, bo aby zbudować plan wykonania zapytania, planista musi znać każdą kolumnę z jej typem dla każdego wyniku pośredniego. Jeśli zaprojektujesz zapytanie z funkcją, która musi zostać wykonana, aby znaleźć strukturę wyniku, która tworzy problem z kurczakiem i jajkiem:planowanie musi poprzedzać wykonanie, nie może od niego zależeć.

Dzięki dynamicznej technice wnioskowania o typie zastosowanej do anyelement , PostgreSQL już przesuwa kopertę, aby zaimplementować jak najwięcej polimorfizmu, biorąc pod uwagę to ograniczenie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Uzyskaj czas ze strefą czasową z czasu bez strefy czasowej i nazwy strefy czasowej

  2. Jak wypełnić bazę danych postgresql za pomocą Mrjob i Hadoop

  3. Jak używać pgBackRest do tworzenia kopii zapasowych PostgreSQL i TimescaleDB?

  4. 3 sposoby na wyświetlenie listy wszystkich wyzwalaczy dla danej tabeli w PostgreSQL

  5. Usunięcie indeksu za pomocą psycopg2 działa przed lub po zatwierdzeniu?