PERBARUI :Lihat tutorial luar biasa ini untuk penjelasan tentang cara mengambil dan mengelola refkursor.
Karena node-postgres tidak mengenali refkursor yang Anda kembalikan sebagai pegangan set hasil, sepertinya node-postgres tidak mendukung beberapa set hasil dari PostgreSQL. Itu cukup adil karena PostgreSQL juga tidak mendukung banyak set hasil, mereka hanya ditiru dengan refkursor.
Anda dapat FETCH
dari refcursor
melalui perintah kursor tingkat SQL perintah kursor tingkat SQL
, meskipun dokumentasi untuk itu menyedihkan. Anda tidak perlu menggunakan PL/PgSQL
penanganan kursor untuk melakukannya. Hanya:
FETCH ALL FROM "<unnamed portal 1>";
Perhatikan tanda kutip ganda, yang penting. Ganti nama refkursor yang dikembalikan dari fungsi Anda untuk <unnamed portal 1>
.
Perhatikan juga bahwa transaksi yang membuat refcursor harus tetap terbuka kecuali kursor dibuat WITH HOLD
. Non-HOLD
kursor ditutup ketika transaksi melakukan atau memutar kembali.
Misalnya, mengingat fungsi dummy 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';
... yang mengembalikan satu set kursor, Anda bisa mendapatkan hasilnya dengan meneruskan nama portal ke FETCH
, misalnya:
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=#