]> granicus.if.org Git - postgresql/commit - contrib/bloom/blinsert.c
Log the creation of an init fork unconditionally.
authorRobert Haas <rhaas@postgresql.org>
Thu, 8 Dec 2016 19:09:09 +0000 (14:09 -0500)
committerRobert Haas <rhaas@postgresql.org>
Thu, 8 Dec 2016 19:12:08 +0000 (14:12 -0500)
commitfa0f466d5329e10b16f3b38c8eaf5306f7e234e8
tree2a4b356448f6cf103949cd0cd403fe21e019354c
parent0b78106cd4651ad7867036a463ec743f6d3d2e86
Log the creation of an init fork unconditionally.

Previously, it was thought that this only needed to be done for the
benefit of possible standbys, so wal_level = minimal skipped it.
But that's not safe, because during crash recovery we might replay
XLOG_DBASE_CREATE or XLOG_TBLSPC_CREATE record which recursively
removes the directory that contains the new init fork.  So log it
always.

The user-visible effect of this bug is that if you create a database
or tablespace, then create an unlogged table, then crash without
checkpointing, then restart, accessing the table will fail, because
the it won't have been properly reset.  This commit fixes that.

Michael Paquier, per a report from Konstantin Knizhnik.  Wording of
the comments per a suggestion from me.
contrib/bloom/blinsert.c
src/backend/access/nbtree/nbtree.c
src/backend/access/spgist/spginsert.c
src/backend/catalog/heap.c