Dear Amit, Thanks for your suggestion! PSA new version.
> The other problem is that pg_resetwal removes all pre-existing WAL > files which in this case could lead to the removal of the WAL file > corresponding to restart_lsn. This is because at least the shutdown > checkpoint record will be written after the creation of slots which > could be in the new file used for restart_lsn. Then when we invoke > pg_resetwal, it can remove that file. > > One idea to deal with this could be to do the reset WAL stuff > (FindEndOfXLOG(), KillExistingXLOG(), KillExistingArchiveStatus(), > WriteEmptyXLOG()) in a separate function (say in pg_upgrade) and then > create slots. If we do this, then we additionally need an option in > pg_resetwal which skips resetting the WAL as that would have been done > before creating the slots. Based on above idea, I made new version patch which some functionalities were exported from pg_resetwal. In this approach, pg_upgrade itself removed WALs and then create logical slots, then pg_resetwal would be called with new option --no-switch, which avoid to switch a WAL segment file. The option is only used for the upgrading purpose so it is not written in doc and usage(). This option is not required if pg_resetwal -o does not discard WAL records. Please see the fork thread [1]. We do not have to reserve future restart_lsn while creating a slot, so the binary function binary_upgrade_create_logical_replication_slot() was removed. Another advantage of this approach is to avoid calling pg_log_standby_snapshot() after the pg_resetwal. This was needed because of two reasons, but they were resolved automatically. 1) pg_resetwal removes all WAL files. 2) Logical slots requires a RUNNING_XACTS record for building a snapshot. [1]: https://www.postgresql.org/message-id/CAA4eK1KRyPMiY4fW98qFofsYrPd87Oc83zDNxSeHfTYh_asdBg%40mail.gmail.com Best Regards, Hayato Kuroda FUJITSU LIMITED
v49-0001-pg_upgrade-Allow-to-replicate-logical-replicatio.patch
Description: v49-0001-pg_upgrade-Allow-to-replicate-logical-replicatio.patch