1.复制槽简介
流复制正常工作的时候,主服务器不会为落后的备用服务器保留额外的 WAL。在某些情况
下,由于某些原因,从服务器可能会断开连接,从而导致延迟的时间增大,并且当某些未
复制的 WAL 文件被回收,备用机无法恢复,就会收到如下错误:
ERROR: requested WAL segment 000000010000000000000008 has already been
removed
复制槽(Physical Replication Slot)提供了一种办法确保主库不会删除还未发送到备库的
WAL 日志,即使备库掉线。
通过 Replication Slot 记录的从库状态,PostgreSQL 会保证从库还没有 apply 的日志,
不会从主库的日志目录里面清除。而且,replication slot 的状态信息是持久化保存的,即
便从库断掉或主库重启,这些信息仍然不会丢掉或失效。
2.创建复制槽
select * from pg_create_physical_replication_slot('slot1');
slot_name | lsn
-----------+-----
slot1 |
(1 row)
select * from pg_replication_slots;
-[ RECORD 1 ]-------+---------
slot_name | slot1 #复制槽名称
plugin | #复制槽对应的输出插件名,如果是物理复制槽,这里显示为空
slot_type | physical #复制槽类型,有 physical 或 logical
datoid | #复制槽对应的数据库 oid,如果物理复制槽,此字段显示为空
database | #复制槽对应的数据库名称,如果物理复制槽,此字段显示为空
temporary | f #是否为临时复制操,临时槽不会被保存在磁盘上并且会在出错
或会话结束时自动被删除掉