Можно ли частично обновить материализованное представление в PostgreSQL?

в Oracle, можно обновить только часть данных. Но в PostgreSQL, материализованные представления поддерживаются с 9.3 (текущая версия), который не так давно. Поэтому я задаюсь вопросом: Можно ли обновить только часть данных в материализованном представлении в PostgreSQL 9.3? Если да, то как это сделать?

2 ответов


PostgreSQL пока не поддерживает прогрессивные / частичные обновления материализованных представлений.

9.4 добавляет REFRESH MATERIALIZED VIEW CONCURRENTLY но он все равно должен быть полностью регенерирован.

надеюсь, мы увидим поддержку в 9.5, если кто-то достаточно энтузиазм. Это можно сделать только без пользовательских триггеров/правил для простых материализованных представлений, хотя, и для обработки таких вещей, как инкрементное обновление count(...) ... GROUP BY ....

в Ответ Oracle, на который вы ссылаетесь, на самом деле не является инкрементным обновлением. Это обновление по разделам. Для того, чтобы PostgreSQL поддерживал Это изначально, он сначала должен был бы поддерживать реальное декларативное разбиение-чего он не делает, хотя мы обсуждаем, можно ли это сделать для 9.5.


Я только что столкнулся с подобной проблемой. Учимся у ответ Крейга что это невозможно, я использовал обходной путь. Я анализировала материализованное представление и присоединились отдельные части в VIEW:

  1. создать MATERIALIZED VIEW для каждого столбца в вопрос (material_col1, material_col2, etc.), используя общий

на VIEW будет выглядеть так:

CREATE VIEW fake_materialized_view AS 
  SELECT m1.id, m1.col1, m2.col2
  FROM material_col1 as m1 LEFT JOIN 
       material_col2 as m2 
         ON m1.id = m2.id;