In Django mit Materialized Views arbeiten

Auch in einer Django-Anwendung kann man mit PostgreSQLs Materialized Views arbeiten – dieser Artikel erklärt, was man wie machen muss. Nämlich

  • ein passendes Model definieren, das unmanaged ist und den View als Table hat

  • den View innerhalb einer Migration erzeugen (CREATE MATERIALIZED VIEW name AS …)

  • den View gelegentlich (concurrently) refreshen (evtl. könnte man sich im Cache merken, ob er aktuell ist, und per Signal diesen Merker löschen, wenn sich an den verwendeten Tabellen etwas ändert, etwa durch Speichern oder Löschen von Objekten)

  • beachten, dass der View eine „unique“ indizierbare Spalte hat (sonst geht concurrent refresh nicht)

Abfragen solcher Views können wesentlich schneller sein als bei konventionellen Views, deren Daten bei jedem Zugriff wieder „on the fly“ erstellt werden müssen. Mehr dazu findet sich in der PostgreSQL-Doku.