В Postgres 9.5 я реализовал нетерпеливое материализованное представление с триггерами upsert на UPDATE (мне нужно инкрементное обновление, а встроенные материализованные представления этого не поддерживают), похоже, это работает хорошо.
Но мне также необходимо инициализировать эти таблицы в существующих базах данных, а иногда и обрезать и перестраивать их; Мне нужен встроенный REFRESH MATERIALIZED VTEW. Я мог бы дублировать запросы upsert в триггерах, изменяя специфичный для триггера код, но мне не нравится дублирующийся код.
Я обнаружил, что запуск бездействующего UPDATE в исходной таблице (таблицах) триггера
UPDATE source_table SET id = id;
запускает мои триггеры и поэтому обновляет представление по мере необходимости.
Я раньше не встречал такого рода "сенсорные" запросы и беспокоюсь, что они могут быть хрупкими - Postgres сейчас ведет себя так, но это нестандартно и изменится в 9.6. Обоснованное беспокойство?
Поведение не изменится именно потому, что это нарушит такие варианты использования.





Это обновление праздный ничем не отличается от любого другого обновления настоящий. Это не зависит от версии Postgres и, похоже, не изменится в будущем.