sql >> Databasteknik >  >> RDS >> PostgreSQL

stöder node-postgres flera resultatuppsättningar

UPPDATERA :Se denna utmärkta handledning för en förklaring av hur man hämtar och hanterar refkursorer.

Eftersom node-postgres inte känner igen de referenser som du returnerar som resultatuppsättningshandtag, verkar det troligt att det inte stöder flera resultatuppsättningar från PostgreSQL. Det är rättvist nog eftersom PostgreSQL inte heller har stöd för flera resultatuppsättningar, de är bara emulerade med refkursorer.

Du kan FETCH från en refcursor via markörkommandon på SQL-nivå markörkommandon på SQL-nivå , även om dokumentationen för det är bedrövlig. Du behöver inte använda PL/PgSQL markörhantering för att göra det. Bara:

FETCH ALL FROM "<unnamed portal 1>";

Notera de dubbla citattecken, som är viktiga. Ersätt referensnamnet som returneras från din funktion för <unnamed portal 1> .

Observera också att transaktionen som skapade refkursorn fortfarande måste vara öppen om inte markören skapades WITH HOLD . Icke-HOLD markörerna stängs när transaktionen genomförs eller rullas tillbaka.

Till exempel, med tanke på den dummy-refkursorreturerande funktionen:

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

... som returnerar en uppsättning markörer, kan du få resultaten genom att skicka portalnamnen till FETCH , t.ex.:

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. SKAPA UNIKT INDEX OM INTE FINNS i postgreSQL

  2. SQL-kommaseparerad rad med Group By-sats

  3. SSIS-paket som körs i Serveragent fungerar inte (även när det rapporteras framgång)

  4. Möt Michal Bar and Me på Microsoft Ignite!