我目前正在使用PostgreSQL进行逻辑复制(主/从)。它工作得很好,但是我希望可以预见到连接意外断开(主机脱机或套接字断开...)的情况。
我找到了一种模仿这种情况的方法,并且产生了以下日志:
2019-10-01 15:05:31.205 GMT [165] ERROR: could not receive data from WAL stream: server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
2019-10-01 15:05:31.206 GMT [121] LOG: background worker "logical replication worker" (PID 165) exited with exit code 1
2019-10-01 15:05:31.207 GMT [170] LOG: logical replication apply worker for subscription "sub_2" has started
2019-10-01 15:05:31.207 GMT [170] ERROR: could not connect to the publisher: could not connect to server: Connection refused
Is the server running on host "100.x.x.x" and accepting
TCP/IP connections on port 5432?
现在,我想做的是找到一种在发生订阅时自动禁用订阅的方法(即执行以下命令),然后错误将不会出现在日志中,因为工作线程将不存在并且不会尝试连接到脱机主机。
ALTER SUBSCRIPTION sub2 DISABLE
为此,我看到了一些选项,但是我不知道如何应用它们:
捕获错误(在WAL或“逻辑复制工作者”中)
找到一种在“逻辑复制工作者”启动时执行一些代码的方法
使用CRON(在应用程序级别,因此不是PSQL固有的)来检查服务器是否处于脱机状态(脉动)。如果是这样,请手动执行以上命令。请注意,此解决方案可能有效,但我想避免使用它,因为如果在CRON的两个“滴答声”之间失去连接,仍然会出现一些错误
非常感谢您的帮助,欢呼声