sql >> Database >  >> RDS >> PostgreSQL

ondersteunt node-postgres meerdere resultatensets

UPDATE :Zie deze uitstekende tutorial voor een uitleg over het ophalen en beheren van refcursors.

Aangezien node-postgres de refcursors die u retourneert niet herkent als resultaatsethandles, lijkt het waarschijnlijk dat het niet meerdere resultatensets van PostgreSQL ondersteunt. Dat is eerlijk genoeg, aangezien PostgreSQL ook niet echt meerdere resultatensets ondersteunt, ze worden alleen geëmuleerd met refcursors.

U kunt FETCH van een refcursor via cursoropdrachten op SQL-niveau cursoropdrachten op SQL-niveau , hoewel de documentatie ervoor ellendig is. U hoeft PL/PgSQL niet te gebruiken cursorbehandeling om het te doen. Gewoon:

FETCH ALL FROM "<unnamed portal 1>";

Let op de dubbele aanhalingstekens, die belangrijk zijn. Vervang de refcursornaam die door uw functie wordt geretourneerd door <unnamed portal 1> .

Houd er ook rekening mee dat de transactie die de refcursor heeft gemaakt, nog steeds open moet zijn, tenzij de cursor is gemaakt WITH HOLD . Niet-HOLD cursors worden gesloten wanneer de transactie wordt uitgevoerd of teruggedraaid.

Bijvoorbeeld, gegeven de dummy refcursor-terugkerende functie:

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

... die een set cursors retourneert, kunt u de resultaten krijgen door de portalnamen door te geven aan FETCH , bijvoorbeeld:

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. Oracle-query optimaliseren

  2. pgadmin4:er kan geen verbinding worden gemaakt met de postgresql-toepassingsserver.

  3. SQL Server - inner join bij updaten

  4. Plannen van schijfruimte voor databases