PostgreSQL 9.3';s REFRESH-MATERIALIZED-VIEW命令仅持续Django连接的长度
我在PostgreSQL中有一个物化视图,我希望定期更新。当我尝试从Django manage.py shell手动更新它时,刷新物化视图的命令成功完成,但在我离开shell之后,更改似乎消失了。例如,在我的第一次会话中,我运行以下命令:PostgreSQL 9.3';s REFRESH-MATERIALIZED-VIEW命令仅持续Django连接的长度,django,postgresql,postgresql-9.3,materialized-views,Django,Postgresql,Postgresql 9.3,Materialized Views,我在PostgreSQL中有一个物化视图,我希望定期更新。当我尝试从Django manage.py shell手动更新它时,刷新物化视图的命令成功完成,但在我离开shell之后,更改似乎消失了。例如,在我的第一次会话中,我运行以下命令: >>> Model.objects.get(...).subscribers.count 2L >>> RefreshMaterializedViews() >>> Model.objects.get(..
>>> 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似乎只是费心刷新当前连接的物化视图。另一方面,进入数据库外壳本身,只需运行REFRESH-MATERIALIZED-VIEW xxx代码>有效。好像你忘了:
connection.commit()
这听起来像是您没有提交事务,所有更改都会回滚。您的客户端是否使用自动提交
运行?