Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit48a6bf5

Browse files
committed
Sync PG_VERSION file in CREATE DATABASE.
An OS crash could leave PG_VERSION empty or missing. The same symptomappeared in a backup by block device snapshot, taken after the nextcheckpoint and before the OS flushes the PG_VERSION blocks. Devicesnapshots are not a documented backup method, however. Back-patch tov15, where commit9c08aea introducedSTRATEGY=WAL_LOG and made it the default.Discussion:https://postgr.es/m/20240130195003.0a.nmisch@google.com
1 parent6d423e9 commit48a6bf5

File tree

4 files changed

+18
-1
lines changed

4 files changed

+18
-1
lines changed

‎doc/src/sgml/monitoring.sgml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1545,6 +1545,11 @@ postgres 27093 0.0 0.0 30096 2752 ? Ss 11:34 0:00 postgres: ser
15451545
<entry><literal>TwophaseFileWrite</literal></entry>
15461546
<entry>Waiting for a write of a two phase state file.</entry>
15471547
</row>
1548+
<row>
1549+
<entry><literal>VersionFileSync</literal></entry>
1550+
<entry>Waiting for the version file to reach durable storage while
1551+
creating a database.</entry>
1552+
</row>
15481553
<row>
15491554
<entry><literal>VersionFileWrite</literal></entry>
15501555
<entry>Waiting for the version file to be written while creating a database.</entry>

‎src/backend/commands/dbcommands.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -508,6 +508,14 @@ CreateDirAndVersionFile(char *dbpath, Oid dbid, Oid tsid, bool isRedo)
508508
}
509509
pgstat_report_wait_end();
510510

511+
pgstat_report_wait_start(WAIT_EVENT_VERSION_FILE_SYNC);
512+
if (pg_fsync(fd)!=0)
513+
ereport(data_sync_elevel(ERROR),
514+
(errcode_for_file_access(),
515+
errmsg("could not fsync file \"%s\": %m",versionfile)));
516+
fsync_fname(dbpath, true);
517+
pgstat_report_wait_end();
518+
511519
/* Close the version file. */
512520
CloseTransientFile(fd);
513521

‎src/backend/utils/activity/wait_event.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -717,6 +717,9 @@ pgstat_get_wait_io(WaitEventIO w)
717717
caseWAIT_EVENT_TWOPHASE_FILE_WRITE:
718718
event_name="TwophaseFileWrite";
719719
break;
720+
caseWAIT_EVENT_VERSION_FILE_SYNC:
721+
event_name="VersionFileSync";
722+
break;
720723
caseWAIT_EVENT_VERSION_FILE_WRITE:
721724
event_name="VersionFileWrite";
722725
break;

‎src/include/utils/wait_event.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,8 @@ typedef enum
234234
WAIT_EVENT_WAL_READ,
235235
WAIT_EVENT_WAL_SYNC,
236236
WAIT_EVENT_WAL_SYNC_METHOD_ASSIGN,
237-
WAIT_EVENT_WAL_WRITE
237+
WAIT_EVENT_WAL_WRITE,
238+
WAIT_EVENT_VERSION_FILE_SYNC
238239
}WaitEventIO;
239240

240241

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp