On Wed, Aug 7, 2019 at 5:46 AM Jeevan Chalke <jeevan.chalke@enterprisedb.com> wrote: > So, do you mean we should just do fread() and fwrite() for the whole file? > > I thought it is better if it was done by the OS itself instead of reading 1GB > into the memory and writing the same to the file.
Well, 'cp' is just a C program. If they can write code to copy a file, so can we, and then we're not dependent on 'cp' being installed, working properly, being in the user's path or at the hard-coded pathname we expect, etc. There's an existing copy_file() function in src/backed/storage/file/copydir.c which I'd probably look into adapting for frontend use. I'm not sure whether it would be important to adapt the data-flushing code that's present in that routine or whether we could get by with just the loop to read() and write() data.
Agree that we can certainly use open(), read(), write(), and close() here, but given that pg_basebackup.c and basbackup.c are using file operations, I think using fopen(), fread(), fwrite(), and fclose() will be better here, at-least for consistetncy.
+1 for using fopen(), fread(), fwrite(), and fclose()
Let me know if we still want to go with native OS calls.