diff options
author | Michael Paquier <michael@paquier.xyz> | 2024-07-17 11:50:36 +0900 |
---|---|---|
committer | Michael Paquier <michael@paquier.xyz> | 2024-07-17 11:50:36 +0900 |
commit | ec678692f6d0a8b05b86ca08e96b51e4063cba32 (patch) | |
tree | 7f17b2cf7a81606d9c6c306dccf37db20c0730c8 | |
parent | 4b74ebf726d444ba820830cad986a1f92f724649 (diff) | |
download | postgresql-ec678692f6d0a8b05b86ca08e96b51e4063cba32.tar.gz postgresql-ec678692f6d0a8b05b86ca08e96b51e4063cba32.zip |
Make write of pgstats file durable at shutdown
This switches the pgstats write code to use durable_rename() rather than
rename(). This ensures that the stats file's data is durable when the
statistics are written, which is something only happening at shutdown
now with the checkpointer doing the job.
This could cause the statistics to be lost even after PostgreSQL is shut
down, should a host failure happen, for example.
Suggested-by: Konstantin Knizhnik
Reviewed-by: Bertrand Drouvot
Discussion: https://postgr.es/m/ZpDQTZ0cAz0WEbh7@paquier.xyz
-rw-r--r-- | src/backend/utils/activity/pgstat.c | 7 |
1 files changed, 2 insertions, 5 deletions
diff --git a/src/backend/utils/activity/pgstat.c b/src/backend/utils/activity/pgstat.c index ed7baa6e046..2e22bf27078 100644 --- a/src/backend/utils/activity/pgstat.c +++ b/src/backend/utils/activity/pgstat.c @@ -1478,12 +1478,9 @@ pgstat_write_statsfile(void) tmpfile))); unlink(tmpfile); } - else if (rename(tmpfile, statfile) < 0) + else if (durable_rename(tmpfile, statfile, LOG) < 0) { - ereport(LOG, - (errcode_for_file_access(), - errmsg("could not rename temporary statistics file \"%s\" to \"%s\": %m", - tmpfile, statfile))); + /* durable_rename already emitted log message */ unlink(tmpfile); } } |