Alvaro Herrera <alvhe...@2ndquadrant.com> writes: > On 2018-Nov-04, Thomas Munro wrote: >> Here's a patch to add Windows support by supplying >> src/backend/port/win32/pread.c. Thoughts?
> Hmm, so how easy is to detect that somebody runs read/write on fds where > pread/pwrite have occurred? I guess for data files it's easy to detect > since you'd quickly end up with corrupted files, but what about other > kinds of files? I wonder if we should be worrying about using this > interface somewhere other than fd.c and forgetting about the limitation. Yeah. I think the patch as presented is OK; it uses pread/pwrite only inside fd.c, which is a reasonably non-leaky abstraction. But there's definitely a hazard of somebody submitting a patch that depends on using pread/pwrite elsewhere, and then that maybe not working. What I suggest is that we *not* try to make this a completely transparent substitute. Instead, make the functions exported by src/port/ be "pg_pread" and "pg_pwrite", and inside fd.c we'd write something like #ifdef HAVE_PREAD #define pg_pread pread #endif and then refer to pg_pread/pg_pwrite in the body of that file. That way, if someone refers to pread and expects standard functionality from it, they'll get a failure on platforms not supporting it. FWIW, I tested the given patches on HPUX 10.20; they compiled cleanly and pass the core regression tests. regards, tom lane