Simon Riggs wrote: > On Fri, 2009-10-02 at 10:04 +0300, Heikki Linnakangas wrote: >> Simon Riggs wrote: >>> @@ -7061,6 +7061,15 @@ ShutdownXLOG(int code, Datum arg) >>> else >>> { >>> /* >>> + * Take a snapshot of running transactions and write this to WAL. >>> + * This allows us to reconstruct the state of running transactions >>> + * during archive recovery, if required. We do this even if we are >>> + * not archiving, to allow a cold physical backup of the server to >>> + * be useful as a read only standby. >>> + */ >>> + GetRunningTransactionData(); >>> + >>> + /* >>> * If archiving is enabled, rotate the last XLOG file so that all >>> the >>> * remaining records are archived (postmaster wakes up the archiver >>> * process one more time at the end of shutdown). The checkpoint >>> >> I don't think this will do any good where it's placed. The checkpoint >> that follows will have its redo-pointer beyond the running-xacts record, >> so WAL replay will never see it. > > Perhaps we need two entries then to cover multiple use cases? > > The placement of this was specifically chosen so that it is the last > entry before the log switch, so that the runningxact record would be > archived. > > Yes, we also need one after the shutdown checkpoint to cover the case > where the whole data directory is copied after shutdown. The comments > matched the latter case but the position addressed the first case, so it > looks like I was confused as to which case I was addressing. > > Have updated code to do both. See what you think. Thanks.
It seems dangerous to write a WAL record after the shutdown checkpoint. It will be overwritten by subsequent startup, which is a recipe for trouble. -- Heikki Linnakangas EnterpriseDB http://www.enterprisedb.com -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers