PostgreSQL 9.3 的 REFRESH MATERIALIZED VIEW 命令只持续 Django 连接的时间长度



我在PostgreSQL中有一个物化视图,我想定期更新。当我尝试从Django manage.py shell手动更新它时,刷新物化视图的命令成功完成,但在我离开shell后,更改似乎消失了。例如,在我的第一个会话中,我运行的命令如下:

>>> Model.objects.get(...).subscribers.count
2L
>>> RefreshMaterializedViews()
>>> Model.objects.get(...).subscribers.count
3L

然后退出shell,返回并再次运行查询:

>>> Model.objects.get(...).subscribers.count
2L

RefreshMaterializedViews函数是这样写的:

def RefreshMaterializedViews():
    for materialized_view in MATERIALIZED_VIEWS:
        cursor = connection.cursor()
        try:
            cursor.execute("REFRESH MATERIALIZED VIEW %s;" % materialized_view)
        finally:
            cursor.close()

所以,PostgreSQL似乎只会刷新当前连接的物化视图。另一方面,进入数据库shell本身并简单地运行REFRESH MATERIALIZED VIEW xxx;就可以了。

你好像忘了:

connection.commit()