On Tue, Nov 19, 2019 at 4:58 PM Amit Khandekar <amitdkhan...@gmail.com> wrote: > > On Tue, 19 Nov 2019 at 14:07, Amit Kapila <amit.kapil...@gmail.com> wrote: > > > > On Mon, Nov 18, 2019 at 5:50 PM Amit Khandekar <amitdkhan...@gmail.com> > > wrote: > > > > > > For the API's that use VFDs (like PathNameOpenFile), the files opened > > > are always recorded in the VfdCache array. So it is not required to do > > > the cleanup at (sub)transaction end, because the kernel fds get closed > > > dynamically in ReleaseLruFiles() whenever they reach max_safe_fds > > > limit. So if a transaction aborts, the fds might remain open, but > > > those will get cleaned up whenever we require more fds, through > > > ReleaseLruFiles(). Whereas, for files opened through > > > OpenTransientFile(), VfdCache is not involved, so this needs > > > transaction end cleanup. > > > > > > > Have you tried by injecting some error? After getting the error > > mentioned above in email, when I retried the same query, I got the > > below message. > > > > postgres=# SELECT 1 from > > pg_logical_slot_get_changes('regression_slot', NULL,NULL) LIMIT 1; > > ERROR: could not remove file > > "pg_replslot/regression_slot/xid-1693-lsn-0-18000000.spill" during > > removal of pg_replslot/regression_slot/xid*: Permission denied > > > > And, then I tried to drop the replication slot and I got below error. > > postgres=# SELECT * FROM pg_drop_replication_slot('regression_slot'); > > ERROR: could not rename file "pg_replslot/regression_slot" to > > "pg_replslot/regression_slot.tmp": Permission denied > > > > It might be something related to Windows > > Oh ok, I missed the fact that on Windows we can't delete the files > that are already open, unlike Linux/Unix. > I guess, I may have to use FD_CLOSE_AT_EOXACT flags; or simply use > OpenTemporaryFile(). >
I think setting FD_CLOSE_AT_EOXACT won't work unless you also set have_xact_temporary_files because it checks that flag in CleanupTempFiles. Also, OpenTemporaryFile() doesn't take the input file path, so how will you use it? > I wonder though if this same issue might come up > for the other use-case of PathNameOpenFile() : > logical_rewrite_log_mapping(). > It is possible, but I haven't tested that path. -- With Regards, Amit Kapila. EnterpriseDB: http://www.enterprisedb.com