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

làm thế nào để trả về bảng tạm thời từ hàm postgres?

Bảng tạm thời

Để trả lời câu hỏi của bạn trong tiêu đề:
Một không thể "trả về một bảng tạm thời từ hàm postgres". Các bảng tạm thời được tạo và tự động hiển thị cho cùng một người dùng trong cùng một phiên. Chúng tự động bị loại bỏ vào cuối phiên (hoặc sớm hơn).

Chức năng bảng

Nhưng một hàm trả về bộ (còn gọi là "hàm bảng") có thể được sử dụng giống như một bảng:

CREATE OR REPLACE FUNCTION getresourceinfo(tablename regclass, opened_path int)
  RETURNS TABLE (pathid int, name varchar, pbs varchar
               , parentid varchar, resid int) AS
$func$ 
BEGIN

RETURN QUERY EXECUTE format(
  'SELECT t.pathid, t.name, t.pbs, t.parentid, t.resid
   FROM  ' || tablename || ' t
   WHERE  t.opened_path = $1'
   )
USING opened_path;

END
$func$ LANGUAGE plpgsql;

Sẽ chỉ có ý nghĩa đối với một loạt các bảng mà tất cả đều có chung tên cột được mã hóa cứng với cùng một kiểu dữ liệu.
Gọi (giống như chọn từ một bảng):

SELECT * FROM getresourceinfo(1, 'my_schema.my_tbl')

Tại sao lại chọn kiểu dữ liệu regclass cho tham số bảng?
Tên bảng dưới dạng tham số hàm PostgreSQL

Con trỏ

Để hoàn thiện:Người ta có thể trả về một CURSOR , đó sẽ là một khái niệm rất giống với những gì bạn yêu cầu. Chi tiết trong sách hướng dẫn tại đây.
Nhưng tôi hầu như không bao giờ sử dụng con trỏ. Hầu hết các chức năng của bảng đều thực tế hơn.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy vấn phải để lấy số lượng kết nối hiện tại trong Cơ sở dữ liệu PostgreSQL

  2. Viết cột JSON vào Postgres bằng Pandas .to_sql

  3. Rails tự động gán id đã tồn tại

  4. Truy vấn PostgreSQL WHERE ngày lớn hơn 3 năm tuổi

  5. Docker Compose, Django:role _ không tồn tại