Postgresql Postgres 9.4在刷新物化视图时挂起

Postgresql Postgres 9.4在刷新物化视图时挂起,postgresql,materialized-views,postgresql-9.4,Postgresql,Materialized Views,Postgresql 9.4,我正在考虑Postgres 9.4中物化视图的问题。 有时查询“刷新物化视图xxx”永远挂起 我找到的唯一办法是完全重新启动postgres服务。重新启动后,执行需要几秒钟 我的视图并不复杂,它使用了大约10个表 我已经从pg_stat_activity执行了select*from pg_stat_activity,其中state='active',唯一运行的查询是refresh view CentOS操作系统出现此问题 下次出现这种问题时,我应该看什么?锁?还是别的什么?在我的案例中,问题在于

我正在考虑Postgres 9.4中物化视图的问题。 有时查询“刷新物化视图xxx”永远挂起

我找到的唯一办法是完全重新启动postgres服务。重新启动后,执行需要几秒钟

我的视图并不复杂,它使用了大约10个表

我已经从pg_stat_activity执行了
select*from pg_stat_activity,其中state='active'
,唯一运行的查询是refresh view

CentOS操作系统出现此问题


下次出现这种问题时,我应该看什么?锁?还是别的什么?

在我的案例中,问题在于未关闭的交易

有一个事务查询了我的物化视图。那笔交易从未结束

我添加了一个commit-after查询,它解决了这个问题。
看起来postgre在事务关闭之前会保留一些锁。

检查
pg\u locks
中是否有未授权的锁,并检查刷新的
pg\u stat\u活动
条目是否有
waiting=t
。如果这没有任何意义,请确保为您的PostgreSQL服务器安装了调试符号,并获取明显挂起的进程的堆栈跟踪。看,你说“唯一的办法”是重启PostgreSQL。那么
pg\u cancel\u后端呢?有什么反应吗?怎么样
pg\u terminate\u backend
?它对此有反应吗?那么psql中的control-C呢?@CraigRinger
pg\u cancel\u backend
取消运行查询,但当我再次运行它时,它会挂起。防止挂起的唯一方法是重新启动postgre serviceOk。如果可能,请获取堆栈跟踪。我最近升级到10.3,但仍然看到类似的行为。