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

czy node-postgres obsługuje wiele zestawów wyników?

AKTUALIZUJ :zobacz ten doskonały samouczek po wyjaśnienie, jak pobrać i zarządzać refcursorami.

Ponieważ node-postgres nie rozpoznaje refcursorów, które zwracasz jako uchwyty zestawu wyników, wydaje się prawdopodobne, że nie obsługuje wielu zestawów wyników z PostgreSQL. To wystarczająco sprawiedliwe, ponieważ PostgreSQL tak naprawdę nie obsługuje wielu zestawów wyników, są one po prostu emulowane za pomocą refcursorów.

Możesz FETCH z refcursor za pomocą poleceń kursora na poziomie SQL Polecenia kursora na poziomie SQL , chociaż dokumentacja do tego jest nieszczęśliwa. Nie musisz używać PL/PgSQL obsługi kursora, aby to zrobić. Tylko:

FETCH ALL FROM "<unnamed portal 1>";

Zwróć uwagę na podwójne cudzysłowy, które są ważne. Zastąp nazwę refcursor zwróconą z funkcji dla <unnamed portal 1> .

Zauważ również, że transakcja, która utworzyła refcursor musi być nadal otwarta, chyba że kursor został utworzony WITH HOLD . Bez HOLD kursory są zamykane, gdy transakcja zostanie zatwierdzona lub wycofana.

Na przykład, biorąc pod uwagę fikcyjną funkcję zwracającą refcursor:

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

... który zwraca zestaw kursorów, możesz uzyskać wyniki, przekazując nazwy portali do FETCH , np.:

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. Django Postgresql usuwa domyślne ustawienia kolumn podczas migracji

  2. Dwóch właścicieli tej samej bazy danych PostgreSQL

  3. błąd instrukcji sql:kolumna .. nie istnieje

  4. pg gem sslmode=verify-full, gdzie umieścić certyfikaty?

  5. PostgreSQL Bigserial &nextval