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

поддържа ли node-postgres множество набори от резултати

АКТУАЛИЗАЦИЯ :Вижте този отличен урок за обяснение как да извличате и управлявате рекурсори.

Тъй като node-postgres не разпознава рекурсорите, които връщате като манипулатори на набор от резултати, изглежда вероятно той да не поддържа множество набори от резултати от PostgreSQL. Това е достатъчно справедливо, тъй като PostgreSQL всъщност не поддържа и множество набори от резултати, те просто се емулират с рекурсори.

Можете да FETCH от refcursor чрез команди за курсор на SQL ниво Команди за курсор на SQL ниво , въпреки че документацията за него е мизерна. Не е необходимо да използвате PL/PgSQL работа с курсора, за да го направите. Просто:

FETCH ALL FROM "<unnamed portal 1>";

Обърнете внимание на двойните кавички, които са важни. Заменете името на рекурсора, върнато от вашата функция за <unnamed portal 1> .

Имайте предвид също, че транзакцията, която е създала рефкурсора, все още трябва да е отворена, освен ако курсорът не е създаден WITH HOLD . Не е HOLD курсорите се затварят, когато транзакцията се ангажира или върне назад.

Например като се има предвид фиктивната функция за връщане на рефкурсор:

CREATE OR REPLACE FUNCTION dummy_cursor_returning_fn() RETURNS SETOF refcursor AS $$
DECLARE
    curs1 refcursor;
    curs2 refcursor;
BEGIN
    OPEN curs1 FOR SELECT generate_series(1,4);
    OPEN curs2 FOR SELECT generate_series(5,8);
    RETURN NEXT curs1;
    RETURN NEXT curs2;
    RETURN;
END;
$$ LANGUAGE 'plpgsql';

... който връща набор от курсори, можете да получите резултатите, като подадете имената на портала към FETCH , напр.:

regress=# BEGIN;
BEGIN
regress=# SELECT dummy_cursor_returning_fn();
 dummy_cursor_returning_fn 
---------------------------
 <unnamed portal 7>
 <unnamed portal 8>
(2 rows)

regress=# FETCH ALL FROM "<unnamed portal 7>";
 generate_series 
-----------------
               1
               2
               3
               4
(4 rows)

regress=# FETCH ALL FROM "<unnamed portal 8>";
 generate_series 
-----------------
               5
               6
               7
               8
(4 rows)

regress=# 



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Един към много към един с атрибути Форма със Symfony 3 / Doctrine

  2. Създайте масив в SELECT

  3. Разлика в производителността:условието е поставено в клауза INNER JOIN спрямо WHERE

  4. npgsql тип данни неизвестен при използване на група по

  5. Синхронизиране на postgreSql данни с ElasticSearch