PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Опреснете материализирания изглед автоматично с помощта на правило или уведомете

Трябва да опресните изгледа в тригери след вмъкване/актуализиране/изтриване/отрязване за всеки израз в table1 и 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();

По този начин вашият материализиран изглед е винаги актуален. Това просто решение може да е трудно за прием с чести вмъквания/актуализации и спорадични избори. Във вашия случай (рядко се променя около два пъти на ден) то идеално отговаря на вашите нужди.

За да реализирате отложено опресняване от материализиран изглед се нуждаете от една от следните функции:

  • асинхронен тригер
  • задействайте преди избор
  • правило за избор преди

Postgres няма нито един от тях, така че изглежда, че няма изчистен postgres решение.

Като се има предвид това, бих помислил за функция за обвивка за избрани в mat_view, напр.

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;

Дали е приемливо на практика зависи от подробности, за които не знам.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Избройте всички имена на индекси, имена на колони и името на таблицата на PostgreSQL база данни

  2. Външен ключ към една от многото таблици?

  3. Postgresql - не може да се премахне базата данни поради някои автоматични връзки към DB

  4. Как да активирате TimescaleDB в съществуваща PostgreSQL база данни

  5. Как Tan() работи в PostgreSQL