我在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()