Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w8Rnb-000XYv-24 for pgsql-hackers@arkaria.postgresql.org; Thu, 02 Apr 2026 23:50:08 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w8Rna-008qzA-0F for pgsql-hackers@arkaria.postgresql.org; Thu, 02 Apr 2026 23:50:06 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w8RnZ-008qz0-28 for pgsql-hackers@lists.postgresql.org; Thu, 02 Apr 2026 23:50:06 +0000 Received: from mail-dy1-x132a.google.com ([2607:f8b0:4864:20::132a]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w8RnU-00000000GYJ-3zZ9 for pgsql-hackers@lists.postgresql.org; Thu, 02 Apr 2026 23:50:04 +0000 Received: by mail-dy1-x132a.google.com with SMTP id 5a478bee46e88-2c44547f6d5so96331eec.2 for ; Thu, 02 Apr 2026 16:50:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775173800; cv=none; d=google.com; s=arc-20240605; b=ifFlJl9KKtG0XWDcqwaWhIHV60WrnIdluJbSQraiT4pr8UcyauI/GyMfclS3K0kqnx amH6gLRWzgS/fSCV6brTVdPCOScHVyJrvhDfWb30if/YQAqjlStwSbPp2ladqgU0uXys uabB2MSapYAwvLNphvLOb6WeQJtEIap7hYN6szx4Vk5DIA4fhYOfvE/099dhHHdZ9kHH 51mxVvdzQep1mXR2sCBr7xDAY4H084ZrKCoPcZ+MKNI2DuJSWqI3ST75gz4hgANq/sjb Y/6sRmRG4VD1sEIZV3wtFyBFI3yCXRqHHC4AvA1XUVDN0LgciANJgegdwGVKMrGH5QEQ OQfw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=cx9m37BkRUilid/PFAnbVv698VLYh1P3dPH5F4+agDg=; fh=qAmdBH9+pqMG4crwrXQ9YwjeU7wdYYLKonEx+AMb0QA=; b=S/Bvefq228l9I8kUAL4gLck71rG2JZzDlUfcEQknwa+NBtDbK9bZEsVFZr8OfGFi+Q W5RJsO+TacPulAkMFRHqj/b26OyNZXPsxn0fJ6on13FYMThsdP0Rnyy8y83q5IMyV5B3 lWq54G5scDl4xIAbeBX9rdl2YgXKXb1/4B58Et/cUNkFRneliKe0TehD5UXWFCh2VEjD mdPnE+vHMoxTjGPiI9FUFX4xZTridYHjHSTt9Y7nMBg3UKcUdGrGQ9L+iqnJViNNn6Pg REJ67uLBWBeYm8SA4JdrMDQgfS5pvx9NIvUSCM6LwE/EEbg8A5U8TcPuuBz2Xlm1Jvuo OoGg==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775173800; x=1775778600; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=cx9m37BkRUilid/PFAnbVv698VLYh1P3dPH5F4+agDg=; b=Vze5iRldaKwc9RnL+rJjRG4GvDZKO/T66HEM+xZi2QIn+d0uBo01epLRfbSQAaDfvW ZqIabGKhXsyO+pc8ivk5GuW8ecRfdqYLSNp7QTKTBGLjUxHKiW/lPfWIunQGVhD8d4bi 88PFbYpwzIN7efe5r3Z1xAn9I3haCwluSdSglr9FbaV2rwM1ekGTSgaHgw8vrffPcORK wLQKI1jTW59zjuDf4DHEy/h9Wufrh12N5+kXC4Db6AWs92x76+ct6Rut2Bpaq00tpXIT UeRyi0e+fwJlb18X4Rh5pOCp2BfhQqspimzTDLI2KKTml0HI6o3A7qxLWZd6t4fg5tPt N5YQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775173800; x=1775778600; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=cx9m37BkRUilid/PFAnbVv698VLYh1P3dPH5F4+agDg=; b=DEnY0FjeHXy9WKfxgSzz/qPshBmJBk7QqjFGfRgSWGspFDlzNNujQapZlMdiKnYEO2 cd3A+kVefWXw33GZUjzblurNt5HXCqj/diy6PbKYiTbM8mhazVWYdmXEcLg5UmkFabtq t8pMKMLXHiNOoj2EWUTWtqGSeXSrpihWnBkwsP+7tEgiDeOTd4kWjb3Zg+oeZMV+M0qV kDTZVhj4wsPwx8ZJOSF1sTywdZA+9HZZVmI/lnG1RD5Kh1C+4cdQDxUXs0bjk6XAgiXB CFwrjjCozzAvc5UZznmOYY3CXXEaM7TSbNXjfuEDJvoIa43FAwQUac3HHumhej2srPaN RAMg== X-Forwarded-Encrypted: i=1; AJvYcCXXY60qSHucCUD8lJjVPIEy/nWjQapmewNY5YNYbifr7TUHmg5eTPUByMmh64qjqAU50PPZxPp/ZWiUgv5e@lists.postgresql.org X-Gm-Message-State: AOJu0Yyj9ZN2peSgb+IviFHZmhbXJDP2sUPn7MeAlwu+Malr68FlL+SF z2WxOYuBLD0sc0lgoHmvsyDz71HSlA72jpl8Oxk+niG5Y1aFglL5j1O7RJ65cIzWjqpWSbcJsu/ uAUUMF03shMFmkEuYb6Zb+mUOeL4gR2HYGp44 X-Gm-Gg: AeBDiesROTfTOobTWoKbDKyn8J2zAXFCmrkgnD01/KFmuI9ArIRIoLd+1f8+m6IyLG4 QnNhm3P/gfI8Ey9ZqNBtQ8u18sygufUJFo0WpOUdetLsmrTBnMRNpRWnuojgvgrVopSmRfn8ldO SfCjbhw0bgOn+K2/6xl8lIWGR8vrS3/EkV7z0df6bmO64bCmeMlXZYRMpE18gvYR4Wi+nMEkLO+ J85fQ57DdM/+h+3H6kegXS6Kje+khZOStqRfA4xNfF8bQRoPRrf9A/sZOx/z6V/5t496AH806Zg UvN7tw5JfSr/4f/yk7Lpg0UwnfGPdPGIMp/fRVmA9jWw4TfWLdHhU6VaYJKMJBIQ X-Received: by 2002:a05:7300:a889:b0:2c5:7e02:4bf0 with SMTP id 5a478bee46e88-2cbfe1758f4mr228965eec.8.1775173799728; Thu, 02 Apr 2026 16:49:59 -0700 (PDT) MIME-Version: 1.0 References: <2250061.1774104346@sss.pgh.pa.us> <3341199.1774221191@sss.pgh.pa.us> <3424809.1774234940@sss.pgh.pa.us> <1624716.1774736283@sss.pgh.pa.us> <1626907.1774737417@sss.pgh.pa.us> <97a382c0-1f19-4ea0-951f-e37e6abc34a3@vondra.me> <1630755.1774739531@sss.pgh.pa.us> <1873141.1774823011@sss.pgh.pa.us> <3049460.1775067940@sss.pgh.pa.us> <3118179.1775092964@sss.pgh.pa.us> <3565835.1775147392@sss.pgh.pa.us> <3579709.1775151816@sss.pgh.pa.us> <63de1553-829a-488d-8ee0-976afb8dd32c@vondra.me> <3586483.1775155672@sss.pgh.pa.us> <3676229.1775170250@sss.pgh.pa.us> In-Reply-To: <3676229.1775170250@sss.pgh.pa.us> From: Thomas Munro Date: Fri, 3 Apr 2026 12:49:21 +1300 X-Gm-Features: AQROBzBY-PAY8mHj4rjiwj1BfxvoZsQeHg_MQsSoTzWbMPgG1_hRrjdZxe5iHNE Message-ID: Subject: Re: pg_waldump: support decoding of WAL inside tarfile To: Tom Lane Cc: Tomas Vondra , Andres Freund , Michael Paquier , Andrew Dunstan , Amul Sul , Zsolt Parragi , Robert Haas , Chao Li , Anthonin Bonnefoy , Fujii Masao , Jakub Wartak , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000bfde3d064e82db80" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000bfde3d064e82db80 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Apr 3, 2026 at 11:50=E2=80=AFAM Tom Lane wrote: > > How about using --format=3Dustar, instead of that sparse control stuff? > > I did it that way for GNU tar, but did not research whether bsdtar > will take that option. Feel free to hack on ebba64c08 some more. > > (It seems though that the two tars' locutions for "write to stdout" > are different, so we might have to have separate tests even if they > end up pushing the same option.) I have: $ tar --version bsdtar 3.8.2 - libarchive 3.8.2 zlib/1.3.1 liblzma/5.8.1 libzstd/1.5.2 openssl/3.5.4 libb2/bundled $ gtar --version tar (GNU tar) 1.35 Copyright (C) 2023 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later . This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Written by John Gilmore and Jay Fenlason. This seems to work for both: $ tar --format=3Dustar -c /dev/null > /dev/null tar: Removing leading '/' from member names $ gtar --format=3Dustar -c /dev/null > /dev/null gtar: Removing leading `/' from member names The attached passes with both, and regress_log_001_basic looks like: # Running: /usr/bin/tar --format=3Dustar -cf /tmp/J_ifbfUOSd/pg_wal.tar archive_status 000000010000000000000001 000000010000000000000003 000000010000000000000002 summaries [12:12:24.301](0.072s) ok 101 # Running: /usr/local/bin/gtar --format=3Dustar -cf /tmp/pbdsHdrAdw/pg_wal.tar 000000010000000000000002 archive_status 000000010000000000000003 summaries 000000010000000000000001 [12:18:14.739](0.050s) ok 101 I think a Windows system could be using either. BSD tar comes pre-installed by Microsoft and people often install GNU tools. So I think we should use File::Spec->devnull() instead of /dev/null, and Andrew showed that working. I doubt Windows is capable of making sparse files (except perhaps with ReFS?), but it's nice to use the same code everywhere and future-proof in case GNU carries out its thread to switch to pax by default. Windows probably has file attributes that ustar can't represent (?), so I guess that might motivate it to use pax headers if they are indeed added only when needed. Longer term I think we need to tolerate but ignore pax headers. If I understand the spirit of this long evolution, pax archives are intended to be acceptable to pre-pax implementations, which implies that they can't really change the meaning of the bits of the file contents. That's why GNU's --sparse hides funky file encodings from old tars by renaming them to GNUSparseFile.%p/%f, and that leads back to my original suggestion that we should figure out how to detect and reject pax only if we failed to find the file under the expected name. (Or of course we could just implement support for that, and I have a half-baked trial patch for that but now is not the time.) --000000000000bfde3d064e82db80 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Harmonize-tar-option-tests-from-ebba64c0.patch" Content-Disposition: attachment; filename="0001-Harmonize-tar-option-tests-from-ebba64c0.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mni40si00 RnJvbSAwNjM1YzAxMDY5NDZjZTc2YzFiYjg0YTVjMTdiNzFkMGIwZTU3NGY3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+ CkRhdGU6IEZyaSwgMyBBcHIgMjAyNiAxMjowMzo1NiArMTMwMApTdWJqZWN0OiBbUEFUQ0hdIEhh cm1vbml6ZSB0YXIgb3B0aW9uIHRlc3RzIGZyb20gZWJiYTY0YzAuCgoqICBHTlUgYW5kIEJTRCB0 YXIgYm90aCB1bmRlcnN0YW5kIC0tZm9ybWF0PXVzdGFyLgoqICBXaW5kb3dzIGxhY2tzIC9kZXYv bnVsbCwgYnV0IHBlcmwga25vd3MgaXRzIGxvY2FsIG5hbWUuCgpEaXNjdXNzaW9uOiBodHRwczov L3Bvc3Rnci5lcy9tLzM2NzYyMjkuMTc3NTE3MDI1MCU0MHNzcy5wZ2gucGEudXMKQmFja3BhdGNo LXRocm91Z2g6IDE4Ci0tLQogc3JjL3Rlc3QvcGVybC9Qb3N0Z3JlU1FML1Rlc3QvVXRpbHMucG0g fCAxNSArKysrLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDEx IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3BlcmwvUG9zdGdyZVNRTC9UZXN0 L1V0aWxzLnBtIGIvc3JjL3Rlc3QvcGVybC9Qb3N0Z3JlU1FML1Rlc3QvVXRpbHMucG0KaW5kZXgg MTIwOTk5ZjZhYzkuLjA1ZTE2OThlZmE2IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9wZXJsL1Bvc3Rn cmVTUUwvVGVzdC9VdGlscy5wbQorKysgYi9zcmMvdGVzdC9wZXJsL1Bvc3RncmVTUUwvVGVzdC9V dGlscy5wbQpAQCAtMTMyOCwyMSArMTMyOCwxNCBAQCBzdWIgdGFyX3BvcnRhYmlsaXR5X29wdGlv bnMKIAogCSMgR05VIHRhciB0eXBpY2FsbHkgcHJvZHVjZXMgZ251LWZvcm1hdCBhcmNoaXZlcywg d2hpY2ggd2UgY2FuIHJlYWQgZmluZS4KIAkjIEJ1dCBzb21lIHBsYXRmb3JtcyBjb25maWd1cmUg aXQgdG8gZGVmYXVsdCB0byBwb3NpeC9wYXggZm9ybWF0LCBhbmQKLQkjIGFwcGFyZW50bHkgdGhl eSBlbmFibGUgLS1zcGFyc2UgdG9vLiAgT3ZlcnJpZGUgdGhhdC4KLQlpZiAoc3lzdGVtKCIkdGFy IC0tZm9ybWF0PXVzdGFyIC1jIC1PIC9kZXYvbnVsbCA+L2Rldi9udWxsIDI+L2Rldi9udWxsIikK KwkjIGFwcGFyZW50bHkgdGhleSBlbmFibGUgLS1zcGFyc2UgdG9vLiAgQlNEIHRhciBkb2VzIHNv bWV0aGluZyBzaW1pbGFyLgorCSMgT3ZlcnJpZGUgdGhhdC4KKwlteSAkZGV2bnVsbCA9IEZpbGU6 OlNwZWMtPmRldm51bGwoKTsKKwlpZiAoc3lzdGVtKCIkdGFyIC0tZm9ybWF0PXVzdGFyIC1jICRk ZXZudWxsID4kZGV2bnVsbCAyPiRkZXZudWxsIikKIAkJPT0gMCkKIAl7CiAJCXB1c2goQHRhcl9w X2ZsYWdzLCAiLS1mb3JtYXQ9dXN0YXIiKTsKIAl9Ci0KLQkjIGJzZHRhciBhbHNvIGFyY2hpdmVz IHNwYXJzZSBmaWxlcyBieSBkZWZhdWx0LCBidXQgaXQgc3BlbGxzIHRoZSBzd2l0Y2gKLQkjIHRv IGRpc2FibGUgdGhhdCBkaWZmZXJlbnRseS4KLQlpZiAoc3lzdGVtKCIkdGFyIC0tbm8tcmVhZC1z cGFyc2UgLWMgLSAvZGV2L251bGwgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCIpCi0JCT09IDApCi0J ewotCQlwdXNoKEB0YXJfcF9mbGFncywgIi0tbm8tcmVhZC1zcGFyc2UiKTsKLQl9Ci0KIAlyZXR1 cm4gQHRhcl9wX2ZsYWdzOwogfQogCi0tIAoyLjUzLjAKCg== --000000000000bfde3d064e82db80--