Триггеры для обновления нескольких материализованных представлений на основе одной таблицы - PullRequest
1 голос
/ 08 июня 2019

У меня есть пространственная таблица в базе данных Postgres, из которой я создаю три отдельных материализованных представления (каждое на основе определенных пространственных запросов). Я хочу создать триггерные функции для обновления каждого из материализованных представлений об обновлениях, вставках и удалениях.

Я создал три отдельные функции и триггеры, но производительность (как и следовало ожидать) ужасна. Если я запускаю один триггер при обновлении, вставке или удалении, он работает нормально. Ниже приведен пример функции и триггера, который я использую:

CREATE OR REPLACE FUNCTION refresh_mvw_taxa_hex5km()   
RETURNS trigger 
AS $BODY$ 
  BEGIN 
    refresh materialized view mvw_taxa_hex5km; 
    return new; 
  END; 
$BODY$ LANGUAGE plpgsql; 


CREATE TRIGGER refresh_mvw_taxa_hex5km   
AFTER INSERT OR UPDATE OR DELETE ON occurrence   
FOR EACH STATEMENT   
  EXECUTE PROCEDURE refresh_mvw_taxa_hex5km();

Есть ли более эффективный способ сделать это? Я рассмотрел выполнение запланированных задач, но мне действительно нужно обновить изменения в таблице. Я немного прочитал о «одновременно», но не уверен, что это ответ.

...