如何在丢失的连接上自动禁用订阅(PostgreSQL逻辑复制)?

时间:2019-10-02 11:45:06

标签: postgresql logical-replication

我目前正在使用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

为此,我看到了一些选项,但是我不知道如何应用它们:

  1. 捕获错误(在WAL或“逻辑复制工作者”中)

  2. 找到一种在“逻辑复制工作者”启动时执行一些代码的方法

  3. 使用CRON(在应用程序级别,因此不是PSQL固有的)来检查服务器是否处于脱机状态(脉动)。如果是这样,请手动执行以上命令。请注意,此解决方案可能有效,但我想避免使用它,因为如果在CRON的两个“滴答声”之间失去连接,仍然会出现一些错误

非常感谢您的帮助,欢呼声

0 个答案:

没有答案