[PATCH v1] Fix pg_basebackup long-path test on Windows

Started by Harrison Boothabout 2 months ago3 messageshackers
Beta feature

Hackorum builds and tests every patch posted to the lists, not only commitfest submissions. This is Hackorum's own CI rather than the PostgreSQL project's, and it is still under testing - please report anything that looks wrong.

appliessuccessCI history

You can run a PostgreSQL built from this patch straight from Docker, with no checkout and no build:

docker run --rm -p 5432:5432 ghcr.io/hackorum-dev/postgres-patch:t253208
psql -h localhost -U postgres

Built from patchset v3 (message #3), September 21, 2026 at 12:07 AM.

Every patchset is also pushed to a branch of our PostgreSQL fork, so you can check out the same tree CI built. Without a PostgreSQL checkout:

git clone --branch t253208_3 https://github.com/hackorum-dev/postgres.git

In a checkout you already have, add the fork once:

git remote add hackorum https://github.com/hackorum-dev/postgres.git

then, for this patchset and every later one:

git fetch hackorum t253208_3 && git checkout t253208_3

Patchset v3 (message #3) is on t253208_3

Jump to latest
#1Harrison Booth
harrisontbooth@gmail.com

PostgreSQL's pg_basebackup TAP test creates a junction from the short
system temporary directory to the build-tree temporary directory on
Windows. It then creates $superlongname through the build-tree side.

On my build, that target path was 253 characters. Perl's mkdir failed
at Windows' default 248-character directory path limit, but the result
was unchecked. The test then failed later with a misleading
CREATE TABLESPACE "directory does not exist" error.

The attached patch creates the directory through the short side of the
junction and checks the result of mkdir.

I tested current master 38afc3dcb25 with Meson 1.11.2 and MSVC 19.44 on
Windows 11 ARM64:

- Native ARM64: the unpatched isolated test failed; the patched test
passed all 149 subtests.
- x64 cross-build with needs_exe_wrapper=false: the unpatched test
failed; the patched test passed all 149 subtests.

The 2023 discussion below addressed a related pg_basebackup long-file
test. I did not find an existing proposal for this unchecked
long-directory creation.

/messages/by-id/666ac55b-3400-fb2c-2cea-0281bf36a53c@dunslane.net

Best,
Harrison

Attachments:

t253208_1
0001-Fix-pg_basebackup-long-path-test-on-Windows.patchapplication/octet-stream; name=0001-Fix-pg_basebackup-long-path-test-on-Windows.patchDownload+2-2
#2Daniel Gustafsson
daniel@yesql.se
In reply to: Harrison Booth (#1)
Re: [PATCH v1] Fix pg_basebackup long-path test on Windows

On 26 Jul 2026, at 02:02, Harrison Booth <harrisontbooth@gmail.com> wrote:

On my build, that target path was 253 characters. Perl's mkdir failed
at Windows' default 248-character directory path limit, but the result
was unchecked. The test then failed later with a misleading
CREATE TABLESPACE "directory does not exist" error.

-mkdir "$tempdir/$superlongname";
+mkdir "$real_sys_tempdir/$superlongname"
+  or BAIL_OUT "could not create $real_sys_tempdir/$superlongname";

Shouldn't this include $! to give a hint to the user what the error might be?

--
Daniel Gustafsson

#3Harrison Booth
harrisontbooth@gmail.com
In reply to: Daniel Gustafsson (#2)
Re: [PATCH v1] Fix pg_basebackup long-path test on Windows

Daniel,

Thanks for catching. Attached is v2, which adds `$!` to the `BAIL_OUT`
message so a failed directory creation reports the underlying Windows
error.

This does not change the test logic. The v1 results were 149/149
subtests passing on native ARM64 and the x64 cross-build with
`needs_exe_wrapper=false`.

Best,
Harrison

Attachments:

t253208_3
v2-0001-Fix-pg_basebackup-long-path-test-on-Windows.patchtext/x-diff; charset=US-ASCII; name=v2-0001-Fix-pg_basebackup-long-path-test-on-Windows.patchDownload+2-2