PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Segarkan tampilan terwujud secara otomatis menggunakan aturan atau beri tahu

Anda harus menyegarkan tampilan di pemicu setelah menyisipkan/memperbarui/menghapus/memotong untuk setiap pernyataan di table1 dan table2 .

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();

Dengan cara ini, tampilan terwujud Anda selalu up to date. Solusi sederhana ini mungkin sulit diterima dengan penyisipan/pembaruan yang sering dan pilihan sporadis. Dalam kasus Anda (jarang berubah sekitar dua kali sehari), solusi ini idealnya sesuai dengan kebutuhan Anda.

Untuk mewujudkan penyegaran yang ditangguhkan dari tampilan terwujud Anda memerlukan salah satu fitur berikut:

  • pemicu asinkron
  • pemicu sebelum memilih
  • aturan memilih sebelum

Postgres tidak memilikinya, jadi sepertinya tidak ada jelas solusi postgres.

Mempertimbangkan hal ini, saya akan mempertimbangkan fungsi pembungkus untuk pilihan di mat_view, mis.

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;

Apakah dapat diterima dalam praktiknya tergantung pada hal-hal khusus yang saya tidak tahu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menghubungkan ke Postgresql dalam wadah buruh pelabuhan dari luar

  2. kesalahan pernyataan sql:kolom .. tidak ada

  3. Bagaimana timeofday() Bekerja di PostgreSQL

  4. Bagaimana Anda membuat pengguna hanya-baca di PostgreSQL?

  5. Bagaimana cara mengkonfigurasi HikariCP untuk postgresql?