Amp*_*ter 5 postgresql postgresql-9.4
我有以下代码可以在 PostgreSQL 9.4 中启用逻辑解码:
pg_recvlogical -h localhost --slot test_slot --create-slot
pg_recvlogical -h localhost --slot test_slot --start -f -
Run Code Online (Sandbox Code Playgroud)
我生成一个 node.js 子进程来运行此代码并侦听更改,但是我不确定终止连接的正确过程是什么。我通常只是CNTRL+C从命令行或杀死代码中的子进程,但我总是收到错误pg_recvlogical: unexpected termination of replication stream:。终止此连接的正确方法是什么?
PostgreSQL文档说,
--start
从 --slot 指定的逻辑复制槽开始流式传输更改,持续到被信号终止。如果服务器端更改流因服务器关闭或断开连接而结束,则循环重试,除非指定了 --no-loop。
所以我假设标准 Linux 信号含义适用。因此,SIGINTorSIGQUIT应该是可以接受的,给应用程序一些时间来完成。
我所做的是发送SIGINT,然后进入循环,检查是否/proc/$PID_/stat存在,并在自定义超时后发送它SIGKILL,并wait $PID_为其发送。
kill -2 $PID_
for i in `seq 1 8`; do
if [ ! -f /proc/$PID_/stat ] ; then
RETURN_CODE=`wait $PID_`;
break;
fi
sleep 1;
done
if [ -f /proc/$PID_/stat ] ; then
kill -9 $PID_;
RETURN_CODE=`wait $PID_`;
fi
Run Code Online (Sandbox Code Playgroud)
这就是 Bash,但任何像样的平台/语言都会有工具来完成它。缩短了,所以可能有错误:)
| 归档时间: |
|
| 查看次数: |
1545 次 |
| 最近记录: |