在创建postgres逻辑复制插槽时,我使用了here中记录的EXPORT_SNAPSHOT
选项。文档指出,默认情况下,“导出”将导出快照以供其他会话使用。此选项不能在事务中使用...'
但是,当我尝试使用SET TRANSACTION SNAPSHOT
命令从另一个事务导出的快照时,我总是得到invalid snapshot identifier
错误。
有一个导出快照选项明确声明它不应该在一个事务中使用(因此我们无法控制它何时提交),但我们不能在另一个事务中使用导出的快照(正是因为我们无法控制create_replication_slot何时提交,并且当我们尝试使用它时,该快照可能已经被清除),这不是矛盾吗?
ps:我想要实现的是在实际启动逻辑复制之前,在创建复制插槽之前,使用导出的快照复制表数据。
1条答案
按热度按时间s3fp2yjn1#
以下是我所做的工作,仅供参考:
create_replication_slot
命令不能在事务内。导出的快照具有“可重复读取”隔离级别,似乎无法更改。保持连接而不执行任何其他命令。SET TRANSACTION SNAPSHOT <snapshot_name>
,这是您从上面的create_replication_slot
命令中获得的。