postgres.git / summary / log / commit / refs

commit    4e7a8874a15a9bcfe50caf7d39141796a7783507
Author:   Michael Paquier <michael@paquier.xyz>
Date:     Wed Oct 09 04:31:27 2019 +0000
First released in: 13.0, 9.4.25, 9.5.20, 9.6.16, 10.11, 11.6, 12.1

    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


src/backend/access/heap/rewriteheap.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/backend/access/heap/rewriteheap.c b/src/backend/access/heap/rewriteheap.c index 617f81157ac..732e30c5709 100644 --- a/src/backend/access/heap/rewriteheap.c +++ b/src/backend/access/heap/rewriteheap.c @@ -1270,7 +1270,8 @@ CheckPointLogicalRewriteHeap(void) } else { - int fd = OpenTransientFile(path, O_RDONLY | PG_BINARY, 0); + /* on some operating systems fsyncing a file requires O_RDWR */ + int fd = OpenTransientFile(path, O_RDWR | PG_BINARY, 0); /* * The file cannot vanish due to concurrency since this function [parent: dafeac80478f]