diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index fcc04e4acf8..a5d56690aec 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -8049,7 +8049,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 900d181788c..cf2f345269f 100644 --- a/src/test/recovery/t/009_twophase.pl +++ b/src/test/recovery/t/009_twophase.pl @@ -32,7 +32,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