aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>2023-07-06 17:25:29 +0300
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>2023-07-06 17:29:15 +0300
commit80abec3870692454c42b6b809f4b26cf72ea0736 (patch)
tree06b166526dbba3629947157ff8588ab3d01f9bfc /src
parent162aa47c31a0236d68b68d65df3fef0079af0d48 (diff)
downloadpostgresql-80abec3870692454c42b6b809f4b26cf72ea0736.tar.gz
postgresql-80abec3870692454c42b6b809f4b26cf72ea0736.zip
WAL-log the creation of the init fork of unlogged indexes.
We create a file, so we better WAL-log it. In practice, all the built-in index AMs and all extensions that I'm aware of write a metapage to the init fork, which is WAL-logged, and replay of the metapage implicitly creates the fork too. But if ambuildempty() didn't write any page, we would miss it. This can be seen with dummy_index_am. Set up replication, create a 'dummy_index_am' index on an unlogged table, and look at the files created in the replica: the init fork is not created on the replica. Dummy_index_am doesn't do anything with the relation files, however, so it doesn't lead to any user-visible errors. Backpatch to all supported versions. Reviewed-by: Robert Haas Discussion: https://www.postgresql.org/message-id/6e5bbc08-cdfc-b2b3-9e23-1a914b9850a9%40iki.fi
Diffstat (limited to 'src')
-rw-r--r--src/backend/catalog/index.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c
index 0832f7d3ebb..8cee127a4b9 100644
--- a/src/backend/catalog/index.c
+++ b/src/backend/catalog/index.c
@@ -52,6 +52,7 @@
#include "catalog/pg_trigger.h"
#include "catalog/pg_type.h"
#include "catalog/storage.h"
+#include "catalog/storage_xlog.h"
#include "commands/event_trigger.h"
#include "commands/progress.h"
#include "commands/tablecmds.h"
@@ -3012,6 +3013,7 @@ index_build(Relation heapRelation,
!smgrexists(RelationGetSmgr(indexRelation), INIT_FORKNUM))
{
smgrcreate(RelationGetSmgr(indexRelation), INIT_FORKNUM, false);
+ log_smgrcreate(&indexRelation->rd_node, INIT_FORKNUM);
indexRelation->rd_indam->ambuildempty(indexRelation);
}