PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

PostgreSQL:Как да върна динамични редове от таблица, без да използвам списък с дефиниции на колони?

Обработката на anyelement като тип връщане е описано в Полиморфни типове :

Този аргумент във вашия случай е relation_name въведен като anyelement и чрез предаване на NULL::table1 , това наистина казва на планиращия, че това конкретно извикване на function1 трябва да върне SETOF table1 . Дотук добре.

Сега проблемът е, че веднъж изпълнена, функцията не връща SETOF table1 но нещо друго. Това не е очакваното от изпълнителя, оттук и грешката.

Въпреки че заглавието на въпроса е Как да върна динамични редове... , това, което изглежда искате, са динамични колони или полиморфни набори от резултати.

И това е трудна битка със SQL, защото, за да изгради план за изпълнение на заявка, планиращият трябва да знае всяка колона с нейния тип за всеки междинен резултат. Ако проектирате вашата заявка с функция, която трябва да се изпълни, за да се намери структурата на нейния изход, това създава проблем с кокошката и яйцето:планирането трябва да предхожда изпълнението, то не може да зависи от него.

Със своята динамична техника за извеждане на типа, приложена към anyelement , PostgreSQL вече разширява обвивката, за да приложи възможно най-много полиморфизъм предвид това ограничение.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. дефиниран от потребителя тип като входни параметри във функцията на PostgreSQL

  2. Как да разположите PostgreSQL в Docker контейнер с помощта на ClusterControl

  3. Мога ли да използвам ключова дума на Postgres като псевдоним в списъка за избор?

  4. Как да свържа R с PostgreSQL на OSX 10.10.2?

  5. Съществува ред за проверка на Python psycopg2