1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

「pg_cancel_backend」と「pg_terminate_backend」

Last updated at Posted at 2021-12-11

「pg_cancel_backend」と「pg_terminate_backend」の違い

・SIGINT or SIGTERM(プロセスに送るシグナル) ・現在の問合せの取消 or プロセスそのものの終了。 ・実行性能の違いはない ともにシグナル送付で処理を終了させるかプロセス終了させるかなので、性能に差異はない。 強いて言えば、pg_cancel_backendは失敗することがある。

【実行例】
1.処理をキャンセルしたい場合、pidをpg_cancel_backendでキャンセル。
2.上記でキャンセルできなければ、pidをpg_terminate_backendでプロセス終了。
※pg_cancel_backend、pg_terminate_backendは、他バックエンドプロセスやセッションのトランザクションをキャンセル、プロセス終了することはない。
※pg_cancel_backendが返ってこない場合は連続実行するではなく、一旦pg_cancel_backendのセッションを終了させてから、pg_terminate_backendをする方がよい。

【その他】
・各関数の引数(pid)についてpg_cancel_backendを実行した際、実は元のPIDのクエリーは終わってて、別のクエリーが同一pidで該当し、想定外のクエリーをキャンセルすることはタイムラグの程度によってはあり得る。
・pidの再利用に制約はなく、OS側での利用状況に依存する。
・pg_cancel_backendに、PID以外のquery_startの条件を指定する方法等はない。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?