微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我通过PHPPgAdmin接口在一个大的Postgresql表上运行了一个update语句.这太过时了,

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

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

解决方法

你运行什么版本的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.jb51.cc/mssql/82015.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐