Để tự động hóa việc này, bạn cần SQL động
CREATE OR REPLACE FUNCTION f_multi_select()
RETURNS SETOF table1
LANGUAGE plpgsql AS
$func$
BEGIN
RETURN QUERY EXECUTE
(
SELECT string_agg(format('SELECT * FROM %I', tbl), ' UNION ALL ')
FROM (SELECT tbl FROM tablenames ORDER BY id) sub
);
END
$func$;
Gọi:
SELECT * FROM f_multi_select();
Giả sử rằng tất cả các bảng chia sẻ cùng một loại hàng - vì vậy chúng ta có thể chọn bất kỳ hàng nào để xác định kiểu trả về của hàm.
Tôi đã đưa vào một truy vấn con với ORDER BY
- trong trường hợp thứ tự của các bảng có ý nghĩa.
Có liên quan: