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

Tự động làm mới chế độ xem cụ thể hóa bằng cách sử dụng quy tắc hoặc thông báo

Bạn nên làm mới chế độ xem trong trình kích hoạt sau khi chèn / cập nhật / xóa / cắt bớt cho mỗi câu lệnh trên table1table2 .

create or replace function refresh_mat_view()
returns trigger language plpgsql
as $$
begin
    refresh materialized view mat_view;
    return null;
end $$;

create trigger refresh_mat_view
after insert or update or delete or truncate
on table1 for each statement 
execute procedure refresh_mat_view();

create trigger refresh_mat_view
after insert or update or delete or truncate
on table2 for each statement 
execute procedure refresh_mat_view();

Bằng cách này, chế độ xem vật chất của bạn luôn được cập nhật. Giải pháp đơn giản này có thể khó được chấp nhận với các lần chèn / cập nhật thường xuyên và các lựa chọn lẻ tẻ. Trong trường hợp của bạn (hiếm khi thay đổi khoảng hai lần một ngày), nó hoàn toàn phù hợp với nhu cầu của bạn.

Để nhận ra làm mới hoãn lại của một chế độ xem cụ thể hóa, bạn cần một trong các tính năng sau:

  • trình kích hoạt không đồng bộ
  • kích hoạt trước khi chọn
  • quy tắc chọn trước

Postgres không có cái nào trong số chúng, vì vậy có vẻ như không có cái nào rõ ràng giải pháp postgres.

Tính đến điều này, tôi sẽ xem xét một hàm trình bao bọc cho các lựa chọn trên mat_view, ví dụ:

CREATE OR REPLACE FUNCTION select_from_mat_view(where_clause text)
RETURNS SETOF mat_view AS $body$
BEGIN
  -- here is checking whether to refresh the mat_view
  -- then return the select:
  RETURN QUERY EXECUTE FORMAT ('SELECT * FROM mat_view %s', where_clause);
END;
$body$ LANGUAGE plpgsql;

Nếu nó được chấp nhận trong thực tế phụ thuộc vào thông tin cụ thể mà tôi không biết.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. hàm trả về nhiều cột dưới dạng một cột duy nhất thay vì nhiều cột

  2. Tổng quan về các nút kế hoạch phụ trợ khác nhau trong PostgreSQL

  3. postgresql - thay thế tất cả các trường hợp của một chuỗi trong trường văn bản

  4. Có thể sử dụng một biến và không chỉ định kiểu trả về trong postgreSQL không?

  5. Chèn nhiều hàng trong một bảng dựa trên số trong bảng khác