aboutsummaryrefslogtreecommitdiff
path: root/src/backend/access/heap/rewriteheap.c
diff options
context:
space:
mode:
authorMichael Paquier <michael@paquier.xyz>2019-10-09 13:30:43 +0900
committerMichael Paquier <michael@paquier.xyz>2019-10-09 13:30:43 +0900
commitb8e19b932a99a7eb5a3bce84e74b0b7c093d0981 (patch)
tree9b4432fd6b7a3dd6aefe101bb41995804d701bc5 /src/backend/access/heap/rewriteheap.c
parent1634d361577aab30c7d90336c96b969a2f5e5811 (diff)
downloadpostgresql-b8e19b932a99a7eb5a3bce84e74b0b7c093d0981.tar.gz
postgresql-b8e19b932a99a7eb5a3bce84e74b0b7c093d0981.zip
Flush logical mapping files with fd opened for read/write at checkpoint
The file descriptor was opened with read-only to fsync a regular file, which would cause EBADFD errors on some platforms. This is similar to the recent fix done by a586cc4b (which was broken by me with 82a5649), except that I noticed this issue while monitoring the backend code for similar mistakes. Backpatch to 9.4, as this has been introduced since logical decoding exists as of b89e151. Author: Michael Paquier Reviewed-by: Andres Freund Discussion: https://postgr.es/m/20191006045548.GA14532@paquier.xyz Backpatch-through: 9.4
Diffstat (limited to 'src/backend/access/heap/rewriteheap.c')
-rw-r--r--src/backend/access/heap/rewriteheap.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/backend/access/heap/rewriteheap.c b/src/backend/access/heap/rewriteheap.c
index 7c98a42b8ba..306e74ea103 100644
--- a/src/backend/access/heap/rewriteheap.c
+++ b/src/backend/access/heap/rewriteheap.c
@@ -1280,7 +1280,8 @@ CheckPointLogicalRewriteHeap(void)
}
else
{
- int fd = OpenTransientFile(path, O_RDONLY | PG_BINARY);
+ /* on some operating systems fsyncing a file requires O_RDWR */
+ int fd = OpenTransientFile(path, O_RDWR | PG_BINARY);
/*
* The file cannot vanish due to concurrency since this function