Enable Unix-domain sockets support on Windows

Enterprise / PostgreSQL - Peter Eisentraut [eisentraut.org] - 28 March 2020 14:01 EDT

As of Windows 10 version 1803, Unix-domain sockets are supported on Windows. But it's not automatically detected by configure because it looks for struct sockaddr_un and Windows doesn't define that. So we just make our own definition on Windows and override the configure result.

Set DEFAULT_PGSOCKET_DIR to empty on Windows so by default no Unix-domain socket is used, because there is no good standard location.

In pg_upgrade, we have to do some extra tweaking to preserve the existing behavior of not using Unix-domain sockets on Windows. Adding support would be desirable, but it needs further work, in particular a way to select whether to use Unix-domain sockets from the command-line or with a run-time test.

The pg_upgrade test script needs a fix. The previous code passed "localhost" to postgres -k, which only happened to work because Windows used to ignore the -k argument value altogether. We instead need to pass an empty string to get the desired effect.

The test suites will continue to not use Unix-domain sockets on Windows. This requires a small tweak in pg_regress.c. The TAP tests don't need to be changed because they decide by the operating system rather than HAVE_UNIX_SOCKETS.

8f3ec75de4 Enable Unix-domain sockets support on Windows
config/c-library.m4 | 5 +++--
configure | 5 ++++-
src/bin/pg_upgrade/option.c | 4 ++--
src/bin/pg_upgrade/server.c | 2 +-
src/bin/pg_upgrade/test.sh | 11 ++++++-----
src/include/c.h | 4 ++++
src/include/pg_config.h.in | 6 +++---
src/include/pg_config_manual.h | 15 ++++++++-------
src/include/port/win32.h | 11 +++++++++++
src/test/regress/pg_regress.c | 10 +++++++---
src/tools/msvc/Solution.pm | 2 +-
11 files changed, 50 insertions(+), 25 deletions(-)

Upstream: git.postgresql.org

  • Share