错误:无效的逻辑复制消息类型“T”

问题描述

我在 Postgres 10.3 逻辑复制中遇到以下错误

设置

  • 在 master 中,postgresql 使用 12.3
  • 逻辑上,postgres 10.3

日志

2021-03-22 13:06:57.332 IST @ 25929 LOG:  checkpoints are occurring too frequently (22 seconds apart)
2021-03-22 13:06:57.332 IST @ 25929 HINT:  Consider increasing the configuration parameter "max_wal_size".
2021-03-22 14:34:21.263 IST @ 21461 ERROR:  invalid logical replication message type "T"
2021-03-22 14:34:21.315 IST @ 3184 LOG:  logical replication apply worker for subscription "elk_subscription_133" has started
2021-03-22 14:34:21.367 IST @ 3184 ERROR:  invalid logical replication message type "T"
2021-03-22 14:34:21.369 IST @ 25921 LOG:  worker process: logical replication worker for subscription 84627 (PID 3184) exited with exit code 1
2021-03-22 14:34:22.259 IST @ 25921 LOG:  worker process: logical replication worker for subscription 84627 (PID 21461) exited with exit code 1
2021-03-22 14:34:27.281 IST @ 3187 LOG:  logical replication apply worker for subscription "elk_subscription_133" has started
2021-03-22 14:34:27.311 IST @ 3187 ERROR:  invalid logical replication message type "T"
2021-03-22 14:34:27.313 IST @ 25921 LOG:  worker process: logical replication worker for subscription 84627 (PID 3187) exited with exit code 1
2021-03-22 14:34:32.336 IST @ 3188 LOG:  logical replication apply worker for subscription "elk_subscription_133" has started
2021-03-22 14:34:32.362 IST @ 3188 ERROR:  invalid logical replication message type "T"

解决方法

The documentation 描述消息 T

截断

Byte1('T')

将消息标识为截断消息。

在 v11 中添加了对 TRUNCATE 的支持,因此主服务器必须是 v11 或更高版本。

您必须从发布中删除表、刷新订阅、手动截断表、将其添加到发布中并再次刷新订阅。

避免 TRUNCATE 并更改发布:

ALTER PUBLICATION name SET (publish = 'insert,update,delete');

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...