sql >> Databáze >  >> RDS >> PostgreSQL

podporuje node-postgres více sad výsledků

AKTUALIZACE :Viz tento vynikající návod pro vysvětlení, jak načítat a spravovat rekurzory.

Protože node-postgres nerozpoznává rekurzory, které vracíte jako úchyty sady výsledků, zdá se pravděpodobné, že nepodporuje více sad výsledků z PostgreSQL. To je dost fér, protože PostgreSQL ve skutečnosti také nepodporuje více sad výsledků, jsou pouze emulovány pomocí rekurzorů.

Můžete FETCH z refcursor prostřednictvím příkazů kurzoru na úrovni SQL příkazy kurzoru na úrovni SQL , i když dokumentace k tomu je mizerná. Nemusíte používat PL/PgSQL manipulaci s kurzorem. Jen:

FETCH ALL FROM "<unnamed portal 1>";

Všimněte si dvojitých uvozovek, které jsou důležité. Nahraďte název rekurzoru vrácený vaší funkcí pro <unnamed portal 1> .

Všimněte si také, že transakce, která vytvořila rekurzor, musí být stále otevřená, pokud nebyl kurzor vytvořen WITH HOLD . Jiné než HOLD kurzory se zavřou, když se transakce potvrdí nebo vrátí zpět.

Například s ohledem na funkci vracení falešného rekurzoru:

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

... který vrací sadu kurzorů, můžete získat výsledky předáním názvů portálu do FETCH , např.:

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. Problém s výkonem dotazu na spojení více tabulek MySQL

  2. Rails čekající na migraci v rake db:test:prepare

  3. jak spravovat připojení k dynamicky vytvářeným databázím

  4. Hibernate @Filter kolekce výčtů