I read two previous proposals for something similar. First one is from 2013 [0]. It proposed a OS and filesystem specific implementation. Which was then changed to a patch that adds a config option to specify shell commands that postgres should use for copying files and dirs. This was after commentary that such a feature is better suited for an extension. Which is what I am trying to do.
What was true in 2013 (when the other patch was proposed) is still true. There's no good way at the moment to hook into how postgres copies files and directories. The second thread I found from 2018 [1] proposes filesystem specific changes (BTRFS, APFS and XFS) that operate on a file level. Really nice patch actually, but much more invasive than what I am proposing. Both patches make rather invasive and significant changes specific to the features they're trying to build. The general sentiment I got from reading those two threads is that building in support for these kind of features is hard and is probably better first done as an extension. I understand that the patch I proposed is not an ideal interface, but it gets the job done without having to built this kind of functionality into postgres. I am not proposing any filesystem or OS specific hooks/changes in postgres to make this work. I tried to override the copydir() function without any hooks and I haven't gotten it to work yet. If it does, I'd still prefer the hook. It's more predictable and probably more portable. [0] https://www.postgresql.org/message-id/511b5d11.4040...@socialserve.com [1] https://www.postgresql.org/message-id/bc9ca382-b98d-0446-f699-8c5de2307ca7%402ndquadrant.com On Tue, Sep 3, 2019 at 9:48 AM Peter Eisentraut <peter.eisentr...@2ndquadrant.com> wrote: > > On 2019-09-02 22:16, Swen Kooij wrote: > > Is there anything that I am missing? My early experiments have been > > very promising but my experience with Postgres internals is limited. Any > > help or feedback would be much appreciated. > > You might want to review several previous threads that were > contemplating doing some reflink stuff with btrfs during database > creation. Not exactly what you are doing, but related. > > Also, wouldn't it work if your extension just defined its own copydir() > in the .so? That should then be used over the built-in one -- maybe. > > -- > Peter Eisentraut http://www.2ndQuadrant.com/ > PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services