かなり処理が集中している機能があります。しばらくしてから、中断していても(DBメンテナンスのために)停止する必要があります。私はそれが正常に何をしているかを巻き込むことができるようにSIGINTを送っていきたいと思います。私が見つけたのは、通常のperl割り込みハンドラを導入するとすぐに、関数は割り込みに正しく応答しなくなりました。私はpsqlでselect run_for_awhile()
を行う場合どのように割り込み(つまりSIGTERMまたはSIGINT)を処理するのですか
CREATE OR REPLACE FUNCTION run_for_awhile() RETURNS void
AS $_X$
spi_exec_query('select pg_sleep(30)');
$_X$
LANGUAGE plperlu;
作業
、私はCtrl+C
を入力することができ、それがキャンセルされます。実際のアプリでは私はselect pg_cancel_backend(PID)
しているだろうが、私のテストはその方法で同じ結果を持っています。
SIGINTおよび/またはSIGTERMをキャプチャするように関数を変更した場合、シグナルは送信されますが、関数は30秒後(pg_sleepが終了するまで)通知しません。したがって、ハンドラは最終的には実行されますが、「すぐには」実行されません。あなたがここに行う必要がありますどのような
CREATE OR REPLACE FUNCTION run_for_awhile() RETURNS void
AS $_X$
$SIG{INT} = sub { die "Caught a sigint $!" };
spi_exec_query('select pg_sleep(30)');
$_X$
LANGUAGE plperlu;
こんにちは、おそらくhttp://dba.stackexchange.comの人があなたをより速く助けることができますか? –