将大型 CSV 复制到 postgreSQL 后,流式复制失败

Streaming Replication fails after COPY a large CSV into postgreSQL

我在流式复制中设置了一个 postgreSQL 集群,其中有一个主服务器和两个从服务器。

我创建了一些数据库,我看到它被复制到奴隶。 然后我执行了一个 COPY 命令以在 master 上导入一个大数据集 (3GB)。当 COPY 命令以消息完成时:COPY 43928933 我观察到一个奇怪的行为。从 csv 导入的数据不会复制到从站,流复制不再起作用。我在主节点上创建了一个没有复制到从节点的数据库。

我看到一个奴隶的日志

tail -f 100 /var/log/postgresql/postgresql-9.4-main.log

我看到了这个:

2019-06-27 14:12:48.919 UTC [13099] LOG: started streaming WAL from primary at 0/20000000 on timeline 1 2019-06-27 14:12:48.919 UTC [13099] FATAL: could not receive data from WAL stream: ERROR: requested WAL segment 000000010000000000000020 has already been removed

2019-06-27 14:12:53.931 UTC [13104] LOG: started streaming WAL from primary at 0/20000000 on timeline 1 2019-06-27 14:12:53.931 UTC [13104] FATAL: could not receive data from WAL stream: ERROR: requested WAL segment 000000010000000000000020 has already been removed

2019-06-27 14:12:58.943 UTC [13113] LOG: started streaming WAL from primary at 0/20000000 on timeline 1 2019-06-27 14:12:58.943 UTC [13113] FATAL: could not receive data from WAL stream: ERROR:
requested WAL segment 000000010000000000000020 has already been removed

有谁知道如何解决这个问题?我不明白这种行为。

对于 postgresql 9.4,您需要增加 wal_keep_segments 或使用 replication slots 以便主节点不会在从节点接收 WAL 之前覆盖它们。