ala*_*lan 93 postgresql heroku
我正在使用Heroku和Crane Postgres选项,当我的本地计算机崩溃时,我正从本地计算机上运行数据库查询.如果我跑
select * from pg_stat_activity
Run Code Online (Sandbox Code Playgroud)
其中一个条目有
<IDLE> in transaction
Run Code Online (Sandbox Code Playgroud)
在current_query_text列中.
因此,我无法删除被终止的查询写入的表.我尝试过使用pg_cancel_backend(N)并返回True,但似乎没有任何事情发生.
我怎样才能终止这个过程,以便我可以放弃这个桌子?
tob*_*xen 129
这是Postgres的一般答案,并非特定于heroku
通过运行此sql找到PID:
SELECT pid , query, * from pg_stat_activity
WHERE state != 'idle' ORDER BY xact_start;
Run Code Online (Sandbox Code Playgroud)
(旧版本的Postgres使用procpid而不是pid).您将在第一个(左侧)列中找到pid,第一个(顶部)行可能是您要终止的查询.我假设pid是1234以下.
您可以通过SQL取消查询(即无需shell访问),只要它是您的或您具有超级用户访问权限:
select pg_cancel_backend(1234);
Run Code Online (Sandbox Code Playgroud)
这是"软"方式......查询不会立即消失.如果你赶时间,试试这个:
select pg_terminate_backend(1234);
Run Code Online (Sandbox Code Playgroud)
如果您具有shell访问权限以及root或postgres权限,则还可以从shell执行此操作:
kill -INT 1234
Run Code Online (Sandbox Code Playgroud)
如果这没有帮助,请使用:
kill 1234
Run Code Online (Sandbox Code Playgroud)
不要:
kill -9 1234
Run Code Online (Sandbox Code Playgroud)
...这通常会导致整个postgres服务器火上浇油,然后你也可以重新启动postgres.Postgres非常强大,因此数据不会被破坏,但我建议不要在任何情况下使用"kill -9";-)
持久的"事务中空闲"通常意味着事务没有以"提交"或"回滚"终止,这意味着应用程序存在错误或未正确设计以使用事务数据库.应该避免持久的"交易闲置",因为它也会导致严重的性能问题.
小智 36
试试这个:
select pg_terminate_backend(pid int)
Run Code Online (Sandbox Code Playgroud)
更多关于这一点,你可以找到这里.这应该是解决这个问题的"更清洁",而不是系统杀死进程.
dav*_*sco 19
您可以安装heroku-pg-extras附加组件并运行以下命令来获取PID:
heroku pg:locks --app <your-app>
Run Code Online (Sandbox Code Playgroud)
然后就做:
heroku pg:kill <pid> --app <your-app>
Run Code Online (Sandbox Code Playgroud)
注意:--forceoption可用于发出pg_terminate_backend,它会丢弃该查询的整个连接.
如果heroku pg:locks没有列出任何内容,请尝试heroku pg:ps.
有关更多信息,请访问:https:
//devcenter.heroku.com/articles/heroku-postgresql#pg-ps-pg-kill-pg-killall
| 归档时间: |
|
| 查看次数: |
49928 次 |
| 最近记录: |