diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 6438016d421..885a12a1148 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -7899,7 +7899,11 @@ StartupXLOG(void) TrimCLOG(); TrimMultiXact(); - /* Reload shared-memory state for prepared transactions */ + /* + * Reload shared-memory state for prepared transactions. This needs to + * happen before renaming the last partial segment of the old timeline as + * it may be possible that we have to recovery some transactions from it. + */ RecoverPreparedTransactions(); /* Shut down xlogreader */ diff --git a/src/test/recovery/t/009_twophase.pl b/src/test/recovery/t/009_twophase.pl index 4a79c5ebfdb..2b46a4d1a48 100644 --- a/src/test/recovery/t/009_twophase.pl +++ b/src/test/recovery/t/009_twophase.pl @@ -29,7 +29,9 @@ sub configure_and_reload # Setup london node my $node_london = get_new_node("london"); -$node_london->init(allows_streaming => 1); +# Archiving is used to provide coverage with the creation of .partial segments +# done at the end of recovery and the recovery of two-phase transactions. +$node_london->init(allows_streaming => 1, has_archiving => 1); $node_london->append_conf( 'postgresql.conf', qq( max_prepared_transactions = 10