我现在可以从该表更新一些行,但不是全部更新.尝试更新某些行将挂起.
列是否锁定?如何更新这些行?
解决方法
我认为您的意思是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 举报,一经查实,本站将立刻删除。