| From: | Pierre Forstmann <pierre(dot)forstmann(at)gmail(dot)com> |
|---|---|
| To: | pgsql-hackers(at)lists(dot)postgresql(dot)org |
| Cc: | Sergey Solovev <sergey(dot)soloviev(at)tantorlabs(dot)ru> |
| Subject: | Re: [PATCH] Do not flush BufFile for regular temp files |
| Date: | 2026-08-14 15:55:31 |
| Message-ID: | 178672293101.650980.4633415195764892783.pgcf@coridan.postgresql.org |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
Hello
I think there is an issue with this patch: you are not taking into account a inter-transaction BufFile.
If a BufFile is created with isInterXact set to true, BufFileClose does not flush data and this looks wrong.
You can test this with the following extension https://github.com/pierreforstmann/buffile .
With PostgreSQL 20devdel, I get:
--
-- Test BufFileClose() flushing behavior.
--
CREATE EXTENSION buffile;
-- A regular temporary BufFile should not be flushed by BufFileClose().
--
-- With temp_file_limit = 0, a physical write must fail. Therefore
-- false means that BufFileClose() did not attempt the write.
SET temp_file_limit = 0;
SELECT test_buffile_temp(false);
INFO: BufFileClose has not flushed data
test_buffile_temp
-------------------
f
(1 row)
-- An inter-transaction BufFile must still be flushed by BufFileClose().
--
-- Therefore the physical write should fail with temp_file_limit = 0.
SELECT test_buffile_temp(true);
INFO: BufFileClose has not flushed data
test_buffile_temp
-------------------
f
(1 row)
RESET temp_file_limit;
-- A FileSet BufFile must also be flushed by BufFileClose(), because
-- another opener must be able to see its contents.
SELECT test_buffile_fileset();
INFO: BufFileClose has flushed data
test_buffile_fileset
----------------------
t
(1 row)
Regards
Pierre Forstmann
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Tom Lane | 2026-08-14 16:27:47 | Re: Redundant qualifier elimination |
| Previous Message | Andrew Kane | 2026-08-14 15:52:27 | Fix conversion warnings in headers |