Re: BUG #17393: Delete database after recovery with point-in-time is still missing datafiles
pierre.forstmann@gmail.com
From: Pierre Forstmann <pierre.forstmann@gmail.com>
To: Kyotaro Horiguchi <horikyota.ntt@gmail.com>,
pgsql-bugs@lists.postgresql.org
Date: 2022-03-31T16:04:10Z
Lists: pgsql-bugs
Hello, Thanks your answer posted on the World Backup Day: https://worldbackupday.com/en :-) Regards Le jeu. 31 mars 2022 à 10:26, Kyotaro Horiguchi <horikyota.ntt@gmail.com> a écrit : > At Wed, 30 Mar 2022 21:07:40 +0200, Pierre Forstmann < > pierre.forstmann@gmail.com> wrote in > > I can reproduce your issue with your base_recovery.sh with PG 13.6 on > Alma > > Linux 8.5. > > > > If I modify your script to display transaction numbers before and after > > DROP DATABASE with: > > > > echo -e $rt `date` "drop the database test ..." $wt > > # Drop DB > > psql -c 'select txid_current();' > > psql -c 'DROP DATABASE test' > > psql -c 'select txid_current();' > > This is not a bug, rather a limitation of recovery_target_time. > > The script specifies recovery target by time. The target time time is > compared with timestamps embedded in some kinds of WAL record, mainly > COMMIT. > > The reason why it works is that the query creates COMMIT > records. Otherwise no timestamp seen since the backup point and before > the DROP record. Thus recovery has no means to stop by the target time > before the DROP. > > > The WAL for the bad case looks like this (abbreviated and thinned out): > > tx: 486, desc: DROP dir 1663/16384 > tx: 486, desc: COMMIT 2022-03-31 16:58:05.981976 JST; inval msgs: > catcache 21; sync > tx: 0, desc: SWITCH > > > 2022-03-31 16:58:11.448 JST [145533] LOG: recovery stopping before > commit of transaction 486, time 2022-03-31 16:58:05.981976+09 > > There's no timestamped WAL record found before the DROP, recovery runs > until the COMMIT record *after* the DROP, so the directory is removed. > > > If txid_current() is performed, it looks like: > > tx: 486, desc: COMMIT 2022-03-31 17:10:25.775619 JST > tx: 487, desc: DELETE off 4 flags 0x00 KEYS_UPDATED , blkref #0: rel > 1664/0/1262 blk 0 FPW > tx: 487, desc: DROP dir 1663/16384 > tx: 487, desc: COMMIT 2022-03-31 17:10:25.794775 JST > tx: 488, desc: COMMIT 2022-03-31 17:10:25.801121 JST > tx: 0, desc: SWITCH > > > recovery stopping before commit of transaction 486, time 2022-03-31 > 17:10:25.775619+09 > > In this case, revovery stops *before* the DROP. > > regards. > > -- > Kyotaro Horiguchi > NTT Open Source Software Center >