Hi, On 2013-08-22 22:17:40 +0900, ダンミンフーン wrote: > I've get found out that issue in my project. > Update in PRIMARY while pg_basebackup is performing, > Can cause the STANDBY could not UPDATE after promote. > > In Standby Node, when first XID of a page come, pg_subtrans > must be extended by ExtendSUBTRANS function. > > But if that XID created while pg_basebackup (with "-x" option) > was performing, it did not extend. > > Due to that, after basebackup complete, start that DB and do > promote complete. It failed in SAVEPOINT UPDATE query like follows. > > --- > postgres=# BEGIN; > postgres=# SAVEPOINT testsavepoint; > postgres=# UPDATE test_tbl SET name = 'test'; > ERROR: could not access status of transaction 1409172 > DETAIL: Could not read from file "pg_subtrans/0015" at offset 131072: > Success. > --- > > I've also confirm source and realize that, > > When StartupXLOG call RecordKnownAssignedTransactionIds > (in the "main redo apply loop"), the "standbyState" still > was STANDBY_INITIALIZED, so it is returned without goto > ExtendSUBTRANS (to check and extend space for pg_subtrans). > > Therefor, after STANDBY promote, when UPDATE query made by > SAVEPOINT is executed, the process as follow is performed > and get the above ERROR in SimpleLruReadPage function. > > AssignTransactionId => SubTransSetParent => SubTransSetParent => > SimpleLruReadPage > > I think that ExtendSUBTRANS must be called even if "standbyState" > in STANDBY_INITIALIZED in order to avoid the case above. > > I also attach a patch. Could anyone confirm for me.
Nice diagnosis and thanks for the patch! I think the the issue has already been fixed while investigating a similar issue, could you verify that the current git version works for you? c.f. commit 99ee15b315c187045a95db7b27fd9d866aea93e0 Greetings, Andres Freund -- Andres Freund http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services -- Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-bugs