PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

node-postgres có hỗ trợ nhiều tập kết quả không

CẬP NHẬT :Xem hướng dẫn tuyệt vời này để được giải thích về cách tìm nạp và quản lý con trỏ.

Vì node-postgres không nhận ra các con trỏ mà bạn đang trả về dưới dạng các xử lý tập kết quả, nên có vẻ như nó không hỗ trợ nhiều tập kết quả từ PostgreSQL. Điều đó đủ công bằng vì PostgreSQL cũng không thực sự hỗ trợ nhiều bộ kết quả, chúng chỉ được mô phỏng bằng các con trỏ chuột.

Bạn có thể FETCH từ một refcursor thông qua lệnh con trỏ cấp SQL Lệnh con trỏ cấp SQL , mặc dù tài liệu cho nó là khốn khổ. Bạn không cần sử dụng PL / PgSQL xử lý con trỏ để làm điều đó. Chỉ:

FETCH ALL FROM "<unnamed portal 1>";

Lưu ý các dấu ngoặc kép, điều này rất quan trọng. Thay thế tên con trỏ được trả về từ hàm của bạn cho <unnamed portal 1> .

Cũng lưu ý rằng giao dịch đã tạo con trỏ phải vẫn mở trừ khi con trỏ được tạo WITH HOLD . Non- HOLD con trỏ được đóng khi giao dịch cam kết hoặc quay trở lại.

Ví dụ:với hàm trả về con trỏ chuột giả:

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

... trả về một tập hợp các con trỏ, bạn có thể nhận kết quả bằng cách chuyển tên cổng vào FETCH , ví dụ:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lưu trữ hình ảnh trong PostgreSQL

  2. Bảng 'xoay vòng' đơn giản của Postgres

  3. PostgreSQL tạo một cột mới với các giá trị được điều chỉnh trên các cột khác

  4. nhầm lẫn cổng postgresql 5433 hay 5432?

  5. Tổng hợp các hàm trên nhiều bảng đã kết hợp