sql >> データベース >  >> RDS >> PostgreSQL

node-postgresは複数の結果セットをサポートしていますか

    更新この優れたチュートリアル を参照してください。 refcursorsをフェッチして管理する方法の説明については。

    node-postgresは、返されるリフレクターを結果セットハンドルとして認識しないため、PostgreSQLからの複数の結果セットをサポートしていない可能性があります。 PostgreSQLは実際には複数の結果セットもサポートしておらず、リフレクターでエミュレートされているだけなので、これは十分に公平です。

    あなたはFETCHすることができます refcursorから SQLレベルのカーソルコマンドSQLレベルのカーソルコマンド 、それに関するドキュメントは惨めですが。 PL /PgSQL を使用する必要はありません。 それを行うためのカーソル処理。ただ:

    FETCH ALL FROM "<unnamed portal 1>";
    

    重要な二重引用符に注意してください。関数から返されたリフレクター名を<unnamed portal 1>に置き換えます 。

    また、カーソルがWITH HOLDで作成されていない限り、リフレクターを作成したトランザクションは開いたままである必要があることにも注意してください。 。 HOLD以外 トランザクションがコミットまたはロールバックすると、カーソルは閉じます。

    たとえば、ダミーのrefcursor-returning関数があるとします。

    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. クエリにGROUPBYがある場合、合計のパーセンテージを取得するにはどうすればよいですか?

    2. 単一トランザクションのmysqldumpが、単一トランザクションのないmysqldumpよりも一貫しているのはなぜですか?

    3. マップされたステートメントコレクションにmybatisマッパーの値が含まれていません

    4. PreparedStatementを使用してblobをnullに設定する