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.