sql – 如何释放可能的Postgres行锁?

前端之家收集整理的这篇文章主要介绍了sql – 如何释放可能的Postgres行锁?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我通过PHPPgAdmin接口在一个大的Postgresql表上运行了一个update语句.这太过时了,

我现在可以从该表更新一些行,但不是全部更新.尝试更新某些行将挂起.

列是否锁定?如何更新这些行?

@R_301_323@

你运行什么版本的Postgresql?以下假设为8.1.8或更高版本(它也可能适用于早期版本,我不知道).

我认为您的意思是PHPPgAdmin超时 – Postgresql后端将需要完成查询/更新所需的时间.在这种情况下,原始会话可能仍然存在,UPDATE查询仍在运行.我建议在托管Postgresql服务器进程的机器上运行以下查询(取自chapter 24 of the PostgreSQL docs),以查看会话是否仍然存在:

ps auxwww|grep ^postgres

显示几行:postmaster主进程为1,“writer”,“stats buffer”和“stats collector”进程为1.任何剩余的行是用于服务DB连接的进程.这些行将包含用户名数据库名称.

希望从中可以看到您执行原始UPDATE的会话是否仍然挂起.尽管理论上您可以通过从系统视图pg_stat_activity中选择更详细的信息,默认情况下Postgresql不会设置为填充最有用的字段(如current_query和query_start).有关如何启用此功能,请参阅第24章.

如果你看到会议仍然在那里,就杀死它.您将需要以运行进程(通常是postgres)或root用户的身份登录 – 如果您不自己运行服务器,请让您的DBA为您执行此操作.

还有一件事:为了更新表中的行,Postgresql避免使用锁.相反,它允许每个写入事务创建一个新的“版本”的数据库,当交易被提交时,它成为“当前版本”,只要它与其他事务同时进行的更新不冲突.所以我怀疑你所看到的“悬挂”是由别的东西造成的 – 虽然我不确定. (你检查了显而易见的事情,就像包含数据库的磁盘分区是否已满?)

原文链接:https://www.f2er.com/mssql/82015.html

猜你在找的MsSQL相关文章