Django 迁移与物化视图的版本化管理
利用 Django 自定义迁移操作(RunSQL)管理 PostgreSQL 物化视图的创建、刷新和版本回退,完全集成到 makemigrations 流程。 · 难度:入门 · +10XP
Django 迁移与物化视图的版本化管理
ORM 不支持物化视图,但大数据的聚合查询需要。本课程教你创建一个自定义的 Migration 操作类 MaterializedView,它继承 RunSQL,在 apply 时创建或刷新物化视图,并在 unapply 时删除。同时利用 Django 的 django.contrib.postgres 中的 RawSQL 以及 triggers 实现物化视图自动刷新(pg_trigger)。所有变更都被记录在迁移文件中,可版本控制。
from django.db import migrations, models
class MaterializedView(migrations.RunSQL):
def __init__(self, view_name, select_sql, index_sql=None):
sql = f'CREATE MATERIALIZED VIEW {view_name} AS {select_sql}'
reverse_sql = f'DROP MATERIALIZED VIEW IF EXISTS {view_name}'
super().__init__(sql, reverse_sql)
self.view_name = view_name
class Migration(migrations.Migration):
operations = [
MaterializedView('monthly_sales', 'SELECT date_trunc...'),
]