pgsql: Split up pgfdw_report_error so that we can mark it pg_noreturn.

2025-07-29 Thread Tom Lane
Split up pgfdw_report_error so that we can mark it pg_noreturn.

pgfdw_report_error has the same design fault as elog/ereport
do, namely that it might or might not return depending on elevel.
While those functions are too widely used to redesign, there are
only about 30 call sites for pgfdw_report_error, and it's not
exposed for extension use.  So let's rethink it.  Split it into
pgfdw_report_error() which hard-wires ERROR elevel and is marked
pg_noreturn, and pgfdw_report() which allows only elevels less
than ERROR.  (Thanks to Álvaro Herrera for suggesting this naming.)

The motivation for doing this now is that in the wake of commit
80aa9848b, which removed a bunch of PG_TRYs from postgres_fdw,
we're seeing more thorough flow analysis there from C compilers
and Coverity.  Marking pgfdw_report_error as noreturn where
appropriate should help prevent false-positive complaints.

We could alternatively have invented a macro wrapper similar
to what we use for elog/ereport, but that code is sufficiently
fragile that I didn't find it appetizing to make another copy.
Since 80aa9848b already changed pgfdw_report_error's signature,
this won't make back-patching any harder than it was already.

Author: Tom Lane 
Discussion: https://postgr.es/m/420221.1753714...@sss.pgh.pa.us

Branch
--
master

Details
---
https://git.postgresql.org/pg/commitdiff/74e121c8dc5184318478dee587cf7d8303ab1357

Modified Files
--
contrib/postgres_fdw/connection.c   | 39 +++-
contrib/postgres_fdw/postgres_fdw.c | 44 ++---
contrib/postgres_fdw/postgres_fdw.h |  6 +++--
3 files changed, 55 insertions(+), 34 deletions(-)



pgsql: Suppress uninitialized-variable warning.

2025-07-29 Thread Tom Lane
Suppress uninitialized-variable warning.

In the wake of commit 80aa9848b, a few compilers think that
postgresAcquireSampleRowsFunc's "reltuples" might be used
uninitialized.  The logic is visibly correct, both before
and after that change; presumably what happened here is that
the previous presence of a setjmp() in the function stopped
them from attempting any flow analysis at all.  Add a dummy
initialization to silence the warning.

Reported-by: Ashutosh Bapat 
Author: Tom Lane 
Discussion: 
https://postgr.es/m/caexhw5tkercufa_f6oct5dmj61n+yvrvgyxl7m8dd-5_zxj...@mail.gmail.com

Branch
--
master

Details
---
https://git.postgresql.org/pg/commitdiff/b9ebb92bcb6e0db111deacfbc14f470ce1b3ed8d

Modified Files
--
contrib/postgres_fdw/postgres_fdw.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)



pgsql: Clarify documentation for the initcap function

2025-07-29 Thread Alexander Korotkov
Clarify documentation for the initcap function

This commit documents differences in the definition of word separators for
the initcap function between libc and ICU locale providers.
Backpatch to all supported branches.

Discussion: 
https://postgr.es/m/804cc10ef95d4d3b298e76b181fd9437%40postgrespro.ru
Author: Oleg Tselebrovskiy 
Backpatch-through: 13

Branch
--
REL_17_STABLE

Details
---
https://git.postgresql.org/pg/commitdiff/3c05d4d3433e1bd4097f39fed2a9398cb2e662db

Modified Files
--
doc/src/sgml/func.sgml | 7 +--
1 file changed, 5 insertions(+), 2 deletions(-)



pgsql: Clarify documentation for the initcap function

2025-07-29 Thread Alexander Korotkov
Clarify documentation for the initcap function

This commit documents differences in the definition of word separators for
the initcap function between libc and ICU locale providers.
Backpatch to all supported branches.

Discussion: 
https://postgr.es/m/804cc10ef95d4d3b298e76b181fd9437%40postgrespro.ru
Author: Oleg Tselebrovskiy 
Backpatch-through: 13

Branch
--
REL_13_STABLE

Details
---
https://git.postgresql.org/pg/commitdiff/907ac2ca30bbe7e91959f42f8e420191bb1f2708

Modified Files
--
doc/src/sgml/func.sgml | 7 +--
1 file changed, 5 insertions(+), 2 deletions(-)



pgsql: Clarify documentation for the initcap function

2025-07-29 Thread Alexander Korotkov
Clarify documentation for the initcap function

This commit documents differences in the definition of word separators for
the initcap function between libc and ICU locale providers.
Backpatch to all supported branches.

Discussion: 
https://postgr.es/m/804cc10ef95d4d3b298e76b181fd9437%40postgrespro.ru
Author: Oleg Tselebrovskiy 
Backpatch-through: 13

Branch
--
REL_15_STABLE

Details
---
https://git.postgresql.org/pg/commitdiff/9af075c4e27ebe8d18e9b4f4bbd6b88ae73bd61a

Modified Files
--
doc/src/sgml/func.sgml | 7 +--
1 file changed, 5 insertions(+), 2 deletions(-)



pgsql: Clarify documentation for the initcap function

2025-07-29 Thread Alexander Korotkov
Clarify documentation for the initcap function

This commit documents differences in the definition of word separators for
the initcap function between libc and ICU locale providers.
Backpatch to all supported branches.

Discussion: 
https://postgr.es/m/804cc10ef95d4d3b298e76b181fd9437%40postgrespro.ru
Author: Oleg Tselebrovskiy 
Backpatch-through: 13

Branch
--
master

Details
---
https://git.postgresql.org/pg/commitdiff/c2c2c7e225669e81f83a5db3f0f57131cdaa4a2d

Modified Files
--
doc/src/sgml/func.sgml | 7 +--
1 file changed, 5 insertions(+), 2 deletions(-)



pgsql: Clarify documentation for the initcap function

2025-07-29 Thread Alexander Korotkov
Clarify documentation for the initcap function

This commit documents differences in the definition of word separators for
the initcap function between libc and ICU locale providers.
Backpatch to all supported branches.

Discussion: 
https://postgr.es/m/804cc10ef95d4d3b298e76b181fd9437%40postgrespro.ru
Author: Oleg Tselebrovskiy 
Backpatch-through: 13

Branch
--
REL_16_STABLE

Details
---
https://git.postgresql.org/pg/commitdiff/d861b9282261b066a1147d920a27527c22dc499d

Modified Files
--
doc/src/sgml/func.sgml | 7 +--
1 file changed, 5 insertions(+), 2 deletions(-)



pgsql: Clarify documentation for the initcap function

2025-07-29 Thread Alexander Korotkov
Clarify documentation for the initcap function

This commit documents differences in the definition of word separators for
the initcap function between libc and ICU locale providers.
Backpatch to all supported branches.

Discussion: 
https://postgr.es/m/804cc10ef95d4d3b298e76b181fd9437%40postgrespro.ru
Author: Oleg Tselebrovskiy 
Backpatch-through: 13

Branch
--
REL_18_STABLE

Details
---
https://git.postgresql.org/pg/commitdiff/1fe9e3822c4e574aa526b99af723e61e03f36d4f

Modified Files
--
doc/src/sgml/func.sgml | 7 +--
1 file changed, 5 insertions(+), 2 deletions(-)



pgsql: Clarify documentation for the initcap function

2025-07-29 Thread Alexander Korotkov
Clarify documentation for the initcap function

This commit documents differences in the definition of word separators for
the initcap function between libc and ICU locale providers.
Backpatch to all supported branches.

Discussion: 
https://postgr.es/m/804cc10ef95d4d3b298e76b181fd9437%40postgrespro.ru
Author: Oleg Tselebrovskiy 
Backpatch-through: 13

Branch
--
REL_14_STABLE

Details
---
https://git.postgresql.org/pg/commitdiff/276b022ec05bbd5a9639fa71e1197d53bac20075

Modified Files
--
doc/src/sgml/func.sgml | 7 +--
1 file changed, 5 insertions(+), 2 deletions(-)



pgsql: Handle timeout in PostgreSQL::Test::Cluster::is_alive()

2025-07-29 Thread Michael Paquier
Handle timeout in PostgreSQL::Test::Cluster::is_alive()

This commit adds an extra --timeout=PG_TEST_TIMEOUT_DEFAULT to the call
of pg_isready done in is_alive(), so as it is possible to have more
leverage with the call on machines constrained on resources.

By default the timeout is 180s, and it can be changed depending on the
environment where the tests are run.

Per buildfarm member mamba, where the default timeout of 3s used by
pg_isready has proved that it may not be enough as the postmaster may
not have the time it needs to reply to a ping request.

Reported-by: Alexander Lakhin 
Reviewed-by: Nazir Bilal Yavuz 
Discussion: https://postgr.es/m/29b637df-f818-4b52-986a-f11ba2830...@gmail.com

Branch
--
master

Details
---
https://git.postgresql.org/pg/commitdiff/cb833c1b6d19507b13a1a852feea4dbe5d6f0c20

Modified Files
--
src/test/perl/PostgreSQL/Test/Cluster.pm | 1 +
1 file changed, 1 insertion(+)



pgsql: Remove unnecessary complication around xmlParseBalancedChunkMemo

2025-07-29 Thread Tom Lane
Remove unnecessary complication around xmlParseBalancedChunkMemory.

When I prepared 71c0921b6 et al yesterday, I was thinking that the
logic involving explicitly freeing the node_list output was still
needed to dodge leakage bugs in libxml2.  But I was misremembering:
we introduced that only because with early 2.13.x releases we could
not trust xmlParseBalancedChunkMemory's result code, so we had to
look to see if a node list was returned or not.  There's no reason
to believe that xmlParseBalancedChunkMemory will fail to clean up
the node list when required, so simplify.  (This essentially
completes reverting all the non-cosmetic changes in 6082b3d5d.)

Reported-by: Jim Jones 
Author: Tom Lane 
Discussion: https://postgr.es/m/997668.1753802...@sss.pgh.pa.us
Backpatch-through: 13

Branch
--
master

Details
---
https://git.postgresql.org/pg/commitdiff/902f922218894dd69df1874f9f130dbbafff0499

Modified Files
--
src/backend/utils/adt/xml.c | 10 +-
1 file changed, 1 insertion(+), 9 deletions(-)



pgsql: Update comment

2025-07-29 Thread Peter Eisentraut
Update comment

The code being referred to was moved to a different function in commit
eb8312a22a8, so update the comment accordingly.

Branch
--
master

Details
---
https://git.postgresql.org/pg/commitdiff/c3019bb778b99f2541779ed23402a8f825ab

Modified Files
--
src/backend/utils/adt/tid.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)



pgsql: Run pgindent.

2025-07-29 Thread Robert Haas
Run pgindent.

Per buildfarm member koel, Nathan Bossart, and David Rowley.

Branch
--
master

Details
---
https://git.postgresql.org/pg/commitdiff/1d1612aec7688139e1a5506df1366b4b6a69605d

Modified Files
--
src/backend/storage/buffer/bufmgr.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)



Re: pgsql: Remove misleading hint for "unexpected data beyond EOF" error.

2025-07-29 Thread Robert Haas
On Mon, Jul 28, 2025 at 11:30 PM David Rowley  wrote:
> On Tue, 29 Jul 2025 at 03:17, Robert Haas  wrote:
> > Remove misleading hint for "unexpected data beyond EOF" error.
>
> Just FYI, koel is failing the pgindent test from this:

Oops. Fixed, I hope.

-- 
Robert Haas
EDB: http://www.enterprisedb.com




pgsql: Display Memoize planner estimates in EXPLAIN

2025-07-29 Thread David Rowley
Display Memoize planner estimates in EXPLAIN

There've been a few complaints that it can be overly difficult to figure
out why the planner picked a Memoize plan.  To help address that, here we
adjust the EXPLAIN output to display the following additional details:

1) The estimated number of cache entries that can be stored at once
2) The estimated number of unique lookup keys that we expect to see
3) The number of lookups we expect
4) The estimated hit ratio

Technically #4 can be calculated using #1, #2 and #3, but it's not a
particularly obvious calculation, so we opt to display it explicitly.
The original patch by Lukas Fittl only displayed the hit ratio, but
there was a fear that might lead to more questions about how that was
calculated.  The idea with displaying all 4 is to be transparent which
may allow queries to be tuned more easily.  For example, if #2 isn't
correct then maybe extended statistics or a manual n_distinct estimate can
be used to help fix poor plan choices.

Author: Ilia Evdokimov 
Author: Lukas Fittl 
Reviewed-by: David Rowley 
Reviewed-by: Andrei Lepikhov 
Reviewed-by: Robert Haas 
Discussion: 
https://postgr.es/m/CAP53Pky29GWAVVk3oBgKBDqhND0BRBN6yTPeguV_qSivFL5N_g%40mail.gmail.com

Branch
--
master

Details
---
https://git.postgresql.org/pg/commitdiff/4bc62b86849065939a6b85273fece6b92d6e97bf

Modified Files
--
src/backend/commands/explain.c  | 21 -
src/backend/optimizer/path/costsize.c   | 18 --
src/backend/optimizer/plan/createplan.c | 15 ---
src/backend/optimizer/util/pathnode.c   | 11 ---
src/include/nodes/pathnodes.h   |  4 +++-
src/include/nodes/plannodes.h   | 10 ++
src/include/optimizer/pathnode.h|  2 +-
7 files changed, 66 insertions(+), 15 deletions(-)



pgsql: Add regression test for background worker restart after crash.

2025-07-29 Thread Fujii Masao
Add regression test for background worker restart after crash.

Previously, if a background worker crashed and the server restarted
with restart_after_crash enabled, the worker was not restarted
as expected. This issue was fixed by commit b5d084c5353,
which ensures that background workers without the never-restart flag
are correctly restarted after a crash-and-restart cycle.

To guard against regressions, this commit adds a test that verifies
a background worker successfully restarts in such a scenario.

Author: Fujii Masao 
Reviewed-by: ChangAo Chen 
Discussion: 
https://postgr.es/m/CAHGQGwHF-PdUOgiXCH_8K5qBm8b13h0Qt=dsofxzybxqdbf...@mail.gmail.com

Branch
--
master

Details
---
https://git.postgresql.org/pg/commitdiff/cc321b1d1c55fe208a394b0f8e0e99c5fb91742c

Modified Files
--
src/test/recovery/t/013_crash_restart.pl | 7 +++
1 file changed, 7 insertions(+)



pgsql: Remove unnecessary complication around xmlParseBalancedChunkMemo

2025-07-29 Thread Tom Lane
Remove unnecessary complication around xmlParseBalancedChunkMemory.

When I prepared 71c0921b6 et al yesterday, I was thinking that the
logic involving explicitly freeing the node_list output was still
needed to dodge leakage bugs in libxml2.  But I was misremembering:
we introduced that only because with early 2.13.x releases we could
not trust xmlParseBalancedChunkMemory's result code, so we had to
look to see if a node list was returned or not.  There's no reason
to believe that xmlParseBalancedChunkMemory will fail to clean up
the node list when required, so simplify.  (This essentially
completes reverting all the non-cosmetic changes in 6082b3d5d.)

Reported-by: Jim Jones 
Author: Tom Lane 
Discussion: https://postgr.es/m/997668.1753802...@sss.pgh.pa.us
Backpatch-through: 13

Branch
--
REL_14_STABLE

Details
---
https://git.postgresql.org/pg/commitdiff/cdcdabce5b701ffd2e276214ac3cafddc21a72e2

Modified Files
--
src/backend/utils/adt/xml.c | 7 +--
1 file changed, 1 insertion(+), 6 deletions(-)



pgsql: Remove unnecessary complication around xmlParseBalancedChunkMemo

2025-07-29 Thread Tom Lane
Remove unnecessary complication around xmlParseBalancedChunkMemory.

When I prepared 71c0921b6 et al yesterday, I was thinking that the
logic involving explicitly freeing the node_list output was still
needed to dodge leakage bugs in libxml2.  But I was misremembering:
we introduced that only because with early 2.13.x releases we could
not trust xmlParseBalancedChunkMemory's result code, so we had to
look to see if a node list was returned or not.  There's no reason
to believe that xmlParseBalancedChunkMemory will fail to clean up
the node list when required, so simplify.  (This essentially
completes reverting all the non-cosmetic changes in 6082b3d5d.)

Reported-by: Jim Jones 
Author: Tom Lane 
Discussion: https://postgr.es/m/997668.1753802...@sss.pgh.pa.us
Backpatch-through: 13

Branch
--
REL_15_STABLE

Details
---
https://git.postgresql.org/pg/commitdiff/0928e18eb85a98c0772d1c1f3f6a8f246ea97ca1

Modified Files
--
src/backend/utils/adt/xml.c | 7 +--
1 file changed, 1 insertion(+), 6 deletions(-)



pgsql: Remove unnecessary complication around xmlParseBalancedChunkMemo

2025-07-29 Thread Tom Lane
Remove unnecessary complication around xmlParseBalancedChunkMemory.

When I prepared 71c0921b6 et al yesterday, I was thinking that the
logic involving explicitly freeing the node_list output was still
needed to dodge leakage bugs in libxml2.  But I was misremembering:
we introduced that only because with early 2.13.x releases we could
not trust xmlParseBalancedChunkMemory's result code, so we had to
look to see if a node list was returned or not.  There's no reason
to believe that xmlParseBalancedChunkMemory will fail to clean up
the node list when required, so simplify.  (This essentially
completes reverting all the non-cosmetic changes in 6082b3d5d.)

Reported-by: Jim Jones 
Author: Tom Lane 
Discussion: https://postgr.es/m/997668.1753802...@sss.pgh.pa.us
Backpatch-through: 13

Branch
--
REL_16_STABLE

Details
---
https://git.postgresql.org/pg/commitdiff/762c6d8d26e023afeb36019113ba9f60b811add1

Modified Files
--
src/backend/utils/adt/xml.c | 10 +-
1 file changed, 1 insertion(+), 9 deletions(-)



pgsql: Remove unnecessary complication around xmlParseBalancedChunkMemo

2025-07-29 Thread Tom Lane
Remove unnecessary complication around xmlParseBalancedChunkMemory.

When I prepared 71c0921b6 et al yesterday, I was thinking that the
logic involving explicitly freeing the node_list output was still
needed to dodge leakage bugs in libxml2.  But I was misremembering:
we introduced that only because with early 2.13.x releases we could
not trust xmlParseBalancedChunkMemory's result code, so we had to
look to see if a node list was returned or not.  There's no reason
to believe that xmlParseBalancedChunkMemory will fail to clean up
the node list when required, so simplify.  (This essentially
completes reverting all the non-cosmetic changes in 6082b3d5d.)

Reported-by: Jim Jones 
Author: Tom Lane 
Discussion: https://postgr.es/m/997668.1753802...@sss.pgh.pa.us
Backpatch-through: 13

Branch
--
REL_18_STABLE

Details
---
https://git.postgresql.org/pg/commitdiff/d5f014d897c81d1a610d8ee8084524aacf6ae3fb

Modified Files
--
src/backend/utils/adt/xml.c | 10 +-
1 file changed, 1 insertion(+), 9 deletions(-)



pgsql: Remove unnecessary complication around xmlParseBalancedChunkMemo

2025-07-29 Thread Tom Lane
Remove unnecessary complication around xmlParseBalancedChunkMemory.

When I prepared 71c0921b6 et al yesterday, I was thinking that the
logic involving explicitly freeing the node_list output was still
needed to dodge leakage bugs in libxml2.  But I was misremembering:
we introduced that only because with early 2.13.x releases we could
not trust xmlParseBalancedChunkMemory's result code, so we had to
look to see if a node list was returned or not.  There's no reason
to believe that xmlParseBalancedChunkMemory will fail to clean up
the node list when required, so simplify.  (This essentially
completes reverting all the non-cosmetic changes in 6082b3d5d.)

Reported-by: Jim Jones 
Author: Tom Lane 
Discussion: https://postgr.es/m/997668.1753802...@sss.pgh.pa.us
Backpatch-through: 13

Branch
--
REL_17_STABLE

Details
---
https://git.postgresql.org/pg/commitdiff/7571e0f6e924d9387a743a615f5c700af9214f6c

Modified Files
--
src/backend/utils/adt/xml.c | 10 +-
1 file changed, 1 insertion(+), 9 deletions(-)



pgsql: Remove unnecessary complication around xmlParseBalancedChunkMemo

2025-07-29 Thread Tom Lane
Remove unnecessary complication around xmlParseBalancedChunkMemory.

When I prepared 71c0921b6 et al yesterday, I was thinking that the
logic involving explicitly freeing the node_list output was still
needed to dodge leakage bugs in libxml2.  But I was misremembering:
we introduced that only because with early 2.13.x releases we could
not trust xmlParseBalancedChunkMemory's result code, so we had to
look to see if a node list was returned or not.  There's no reason
to believe that xmlParseBalancedChunkMemory will fail to clean up
the node list when required, so simplify.  (This essentially
completes reverting all the non-cosmetic changes in 6082b3d5d.)

Reported-by: Jim Jones 
Author: Tom Lane 
Discussion: https://postgr.es/m/997668.1753802...@sss.pgh.pa.us
Backpatch-through: 13

Branch
--
REL_13_STABLE

Details
---
https://git.postgresql.org/pg/commitdiff/0ae824704070dd4beaa77ef8840017ba2601affc

Modified Files
--
src/backend/utils/adt/xml.c | 7 +--
1 file changed, 1 insertion(+), 6 deletions(-)



pgsql: Add commit 1d1612aec7 to .git-blame-ignore-revs.

2025-07-29 Thread Nathan Bossart
Add commit 1d1612aec7 to .git-blame-ignore-revs.

Branch
--
master

Details
---
https://git.postgresql.org/pg/commitdiff/0f3a26feddae7ae403c90742095ff4626d7e5617

Modified Files
--
.git-blame-ignore-revs | 3 +++
1 file changed, 3 insertions(+)



pgsql: doc PG 18 relnotes: update to current

2025-07-29 Thread Bruce Momjian
doc PG 18 relnotes:  update to current

Backpatch-through: 18 only

Branch
--
REL_18_STABLE

Details
---
https://git.postgresql.org/pg/commitdiff/a60691eb201dfaa8a2c3aec8815d08ed3371aae7

Modified Files
--
doc/src/sgml/release-18.sgml | 25 +
1 file changed, 21 insertions(+), 4 deletions(-)



pgsql: Fix ./configure checks with __cpuidex() and __cpuid()

2025-07-29 Thread Michael Paquier
Fix ./configure checks with __cpuidex() and __cpuid()

The configure checks used two incorrect functions when checking the
presence of some routines in an environment:
- __get_cpuidex() for the check of __cpuidex().
- __get_cpuid() for the check of __cpuid().
This means that Postgres has never been able to detect the presence of
these functions, impacting environments where these exist, like Windows.

Simply fixing the function name does not work.  For example, using
configure with MinGW on Windows causes the checks to detect all four of
__get_cpuid(), __get_cpuid_count(), __cpuidex() and __cpuid() to be
available, causing a compilation failure as this messes up with the
MinGW headers as we would include both  and .

The Postgres code expects only one in { __get_cpuid() , __cpuid() } and
one in { __get_cpuid_count() , __cpuidex() } to exist.  This commit
reshapes the configure checks to do exactly what meson is doing, which
has been working well for us: check one, then the other, but never allow
both to be detected in a given build.

The logic is wrong since 3dc2d62d0486 and 792752af4eb5 where these
checks have been introduced (the second case is most likely a copy-pasto
coming from the first case), with meson documenting that the configure
checks were broken.  As far as I can see, they are not once applied
consistently with what the code expects, but let's see if the buildfarm
has different something to say.  The comment in meson.build is adjusted
as well, to reflect the new reality.

Author: Lukas Fittl 
Co-authored-by: Michael Paquier 
Discussion: https://postgr.es/m/aigwnygvt5ara...@paquier.xyz
Backpatch-through: 13

Branch
--
REL_15_STABLE

Details
---
https://git.postgresql.org/pg/commitdiff/d6ffc43f95b215fbedba102d343cd31cdd3a5ca7

Modified Files
--
configure| 13 +++--
configure.ac | 25 +
2 files changed, 20 insertions(+), 18 deletions(-)



pgsql: Fix ./configure checks with __cpuidex() and __cpuid()

2025-07-29 Thread Michael Paquier
Fix ./configure checks with __cpuidex() and __cpuid()

The configure checks used two incorrect functions when checking the
presence of some routines in an environment:
- __get_cpuidex() for the check of __cpuidex().
- __get_cpuid() for the check of __cpuid().
This means that Postgres has never been able to detect the presence of
these functions, impacting environments where these exist, like Windows.

Simply fixing the function name does not work.  For example, using
configure with MinGW on Windows causes the checks to detect all four of
__get_cpuid(), __get_cpuid_count(), __cpuidex() and __cpuid() to be
available, causing a compilation failure as this messes up with the
MinGW headers as we would include both  and .

The Postgres code expects only one in { __get_cpuid() , __cpuid() } and
one in { __get_cpuid_count() , __cpuidex() } to exist.  This commit
reshapes the configure checks to do exactly what meson is doing, which
has been working well for us: check one, then the other, but never allow
both to be detected in a given build.

The logic is wrong since 3dc2d62d0486 and 792752af4eb5 where these
checks have been introduced (the second case is most likely a copy-pasto
coming from the first case), with meson documenting that the configure
checks were broken.  As far as I can see, they are not once applied
consistently with what the code expects, but let's see if the buildfarm
has different something to say.  The comment in meson.build is adjusted
as well, to reflect the new reality.

Author: Lukas Fittl 
Co-authored-by: Michael Paquier 
Discussion: https://postgr.es/m/aigwnygvt5ara...@paquier.xyz
Backpatch-through: 13

Branch
--
REL_14_STABLE

Details
---
https://git.postgresql.org/pg/commitdiff/60953d4cba7cce4a8672b1930d173077ac1130fc

Modified Files
--
configure| 13 +++--
configure.ac | 25 +
2 files changed, 20 insertions(+), 18 deletions(-)



pgsql: Fix ./configure checks with __cpuidex() and __cpuid()

2025-07-29 Thread Michael Paquier
Fix ./configure checks with __cpuidex() and __cpuid()

The configure checks used two incorrect functions when checking the
presence of some routines in an environment:
- __get_cpuidex() for the check of __cpuidex().
- __get_cpuid() for the check of __cpuid().
This means that Postgres has never been able to detect the presence of
these functions, impacting environments where these exist, like Windows.

Simply fixing the function name does not work.  For example, using
configure with MinGW on Windows causes the checks to detect all four of
__get_cpuid(), __get_cpuid_count(), __cpuidex() and __cpuid() to be
available, causing a compilation failure as this messes up with the
MinGW headers as we would include both  and .

The Postgres code expects only one in { __get_cpuid() , __cpuid() } and
one in { __get_cpuid_count() , __cpuidex() } to exist.  This commit
reshapes the configure checks to do exactly what meson is doing, which
has been working well for us: check one, then the other, but never allow
both to be detected in a given build.

The logic is wrong since 3dc2d62d0486 and 792752af4eb5 where these
checks have been introduced (the second case is most likely a copy-pasto
coming from the first case), with meson documenting that the configure
checks were broken.  As far as I can see, they are not once applied
consistently with what the code expects, but let's see if the buildfarm
has different something to say.  The comment in meson.build is adjusted
as well, to reflect the new reality.

Author: Lukas Fittl 
Co-authored-by: Michael Paquier 
Discussion: https://postgr.es/m/aigwnygvt5ara...@paquier.xyz
Backpatch-through: 13

Branch
--
REL_13_STABLE

Details
---
https://git.postgresql.org/pg/commitdiff/612f5b80620da0f38b39f48ab545be5c079f621a

Modified Files
--
configure| 13 +++--
configure.in | 25 +
2 files changed, 20 insertions(+), 18 deletions(-)



pgsql: Fix ./configure checks with __cpuidex() and __cpuid()

2025-07-29 Thread Michael Paquier
Fix ./configure checks with __cpuidex() and __cpuid()

The configure checks used two incorrect functions when checking the
presence of some routines in an environment:
- __get_cpuidex() for the check of __cpuidex().
- __get_cpuid() for the check of __cpuid().
This means that Postgres has never been able to detect the presence of
these functions, impacting environments where these exist, like Windows.

Simply fixing the function name does not work.  For example, using
configure with MinGW on Windows causes the checks to detect all four of
__get_cpuid(), __get_cpuid_count(), __cpuidex() and __cpuid() to be
available, causing a compilation failure as this messes up with the
MinGW headers as we would include both  and .

The Postgres code expects only one in { __get_cpuid() , __cpuid() } and
one in { __get_cpuid_count() , __cpuidex() } to exist.  This commit
reshapes the configure checks to do exactly what meson is doing, which
has been working well for us: check one, then the other, but never allow
both to be detected in a given build.

The logic is wrong since 3dc2d62d0486 and 792752af4eb5 where these
checks have been introduced (the second case is most likely a copy-pasto
coming from the first case), with meson documenting that the configure
checks were broken.  As far as I can see, they are not once applied
consistently with what the code expects, but let's see if the buildfarm
has different something to say.  The comment in meson.build is adjusted
as well, to reflect the new reality.

Author: Lukas Fittl 
Co-authored-by: Michael Paquier 
Discussion: https://postgr.es/m/aigwnygvt5ara...@paquier.xyz
Backpatch-through: 13

Branch
--
REL_18_STABLE

Details
---
https://git.postgresql.org/pg/commitdiff/cd2d52cc6b394b2e9f11ff870dd727d16765c9c4

Modified Files
--
configure| 63 +++-
configure.ac | 49 --
meson.build  |  5 +
3 files changed, 60 insertions(+), 57 deletions(-)



pgsql: Fix ./configure checks with __cpuidex() and __cpuid()

2025-07-29 Thread Michael Paquier
Fix ./configure checks with __cpuidex() and __cpuid()

The configure checks used two incorrect functions when checking the
presence of some routines in an environment:
- __get_cpuidex() for the check of __cpuidex().
- __get_cpuid() for the check of __cpuid().
This means that Postgres has never been able to detect the presence of
these functions, impacting environments where these exist, like Windows.

Simply fixing the function name does not work.  For example, using
configure with MinGW on Windows causes the checks to detect all four of
__get_cpuid(), __get_cpuid_count(), __cpuidex() and __cpuid() to be
available, causing a compilation failure as this messes up with the
MinGW headers as we would include both  and .

The Postgres code expects only one in { __get_cpuid() , __cpuid() } and
one in { __get_cpuid_count() , __cpuidex() } to exist.  This commit
reshapes the configure checks to do exactly what meson is doing, which
has been working well for us: check one, then the other, but never allow
both to be detected in a given build.

The logic is wrong since 3dc2d62d0486 and 792752af4eb5 where these
checks have been introduced (the second case is most likely a copy-pasto
coming from the first case), with meson documenting that the configure
checks were broken.  As far as I can see, they are not once applied
consistently with what the code expects, but let's see if the buildfarm
has different something to say.  The comment in meson.build is adjusted
as well, to reflect the new reality.

Author: Lukas Fittl 
Co-authored-by: Michael Paquier 
Discussion: https://postgr.es/m/aigwnygvt5ara...@paquier.xyz
Backpatch-through: 13

Branch
--
REL_17_STABLE

Details
---
https://git.postgresql.org/pg/commitdiff/8de56323c1396626a9d667a0dfe6e1c3a8ca1637

Modified Files
--
configure| 63 +++-
configure.ac | 49 --
meson.build  |  5 +
3 files changed, 60 insertions(+), 57 deletions(-)



pgsql: Fix ./configure checks with __cpuidex() and __cpuid()

2025-07-29 Thread Michael Paquier
Fix ./configure checks with __cpuidex() and __cpuid()

The configure checks used two incorrect functions when checking the
presence of some routines in an environment:
- __get_cpuidex() for the check of __cpuidex().
- __get_cpuid() for the check of __cpuid().
This means that Postgres has never been able to detect the presence of
these functions, impacting environments where these exist, like Windows.

Simply fixing the function name does not work.  For example, using
configure with MinGW on Windows causes the checks to detect all four of
__get_cpuid(), __get_cpuid_count(), __cpuidex() and __cpuid() to be
available, causing a compilation failure as this messes up with the
MinGW headers as we would include both  and .

The Postgres code expects only one in { __get_cpuid() , __cpuid() } and
one in { __get_cpuid_count() , __cpuidex() } to exist.  This commit
reshapes the configure checks to do exactly what meson is doing, which
has been working well for us: check one, then the other, but never allow
both to be detected in a given build.

The logic is wrong since 3dc2d62d0486 and 792752af4eb5 where these
checks have been introduced (the second case is most likely a copy-pasto
coming from the first case), with meson documenting that the configure
checks were broken.  As far as I can see, they are not once applied
consistently with what the code expects, but let's see if the buildfarm
has different something to say.  The comment in meson.build is adjusted
as well, to reflect the new reality.

Author: Lukas Fittl 
Co-authored-by: Michael Paquier 
Discussion: https://postgr.es/m/aigwnygvt5ara...@paquier.xyz
Backpatch-through: 13

Branch
--
master

Details
---
https://git.postgresql.org/pg/commitdiff/1a5212775e46fd573e74c9213392177920f0efd6

Modified Files
--
configure| 63 +++-
configure.ac | 49 --
meson.build  |  5 +
3 files changed, 60 insertions(+), 57 deletions(-)



pgsql: Fix ./configure checks with __cpuidex() and __cpuid()

2025-07-29 Thread Michael Paquier
Fix ./configure checks with __cpuidex() and __cpuid()

The configure checks used two incorrect functions when checking the
presence of some routines in an environment:
- __get_cpuidex() for the check of __cpuidex().
- __get_cpuid() for the check of __cpuid().
This means that Postgres has never been able to detect the presence of
these functions, impacting environments where these exist, like Windows.

Simply fixing the function name does not work.  For example, using
configure with MinGW on Windows causes the checks to detect all four of
__get_cpuid(), __get_cpuid_count(), __cpuidex() and __cpuid() to be
available, causing a compilation failure as this messes up with the
MinGW headers as we would include both  and .

The Postgres code expects only one in { __get_cpuid() , __cpuid() } and
one in { __get_cpuid_count() , __cpuidex() } to exist.  This commit
reshapes the configure checks to do exactly what meson is doing, which
has been working well for us: check one, then the other, but never allow
both to be detected in a given build.

The logic is wrong since 3dc2d62d0486 and 792752af4eb5 where these
checks have been introduced (the second case is most likely a copy-pasto
coming from the first case), with meson documenting that the configure
checks were broken.  As far as I can see, they are not once applied
consistently with what the code expects, but let's see if the buildfarm
has different something to say.  The comment in meson.build is adjusted
as well, to reflect the new reality.

Author: Lukas Fittl 
Co-authored-by: Michael Paquier 
Discussion: https://postgr.es/m/aigwnygvt5ara...@paquier.xyz
Backpatch-through: 13

Branch
--
REL_16_STABLE

Details
---
https://git.postgresql.org/pg/commitdiff/c1984be23cdc3aa74d1fd7bb28a4acaaa6813687

Modified Files
--
configure| 13 +++--
configure.ac | 25 +
2 files changed, 20 insertions(+), 18 deletions(-)



pgsql: Don't put library-supplied -L/-I switches before user-supplied o

2025-07-29 Thread Tom Lane
Don't put library-supplied -L/-I switches before user-supplied ones.

For many optional libraries, we extract the -L and -l switches needed
to link the library from a helper program such as llvm-config.  In
some cases we put the resulting -L switches into LDFLAGS ahead of
-L switches specified via --with-libraries.  That risks breaking
the user's intention for --with-libraries.

It's not such a problem if the library's -L switch points to a
directory containing only that library, but on some platforms a
library helper may "helpfully" offer a switch such as -L/usr/lib
that points to a directory holding all standard libraries.  If the
user specified --with-libraries in hopes of overriding the standard
build of some library, the -L/usr/lib switch prevents that from
happening since it will come before the user-specified directory.

To fix, avoid inserting these switches directly into LDFLAGS during
configure, instead adding them to LIBDIRS or SHLIB_LINK.  They will
still eventually get added to LDFLAGS, but only after the switches
coming from --with-libraries.

The same problem exists for -I switches: those coming from
--with-includes should appear before any coming from helper programs
such as llvm-config.  We have not heard field complaints about this
case, but it seems certain that a user attempting to override a
standard library could have issues.

The changes for this go well beyond configure itself, however,
because many Makefiles have occasion to manipulate CPPFLAGS to
insert locally-desirable -I switches, and some of them got it wrong.
The correct ordering is any -I switches pointing at within-the-
source-tree-or-build-tree directories, then those from the tree-wide
CPPFLAGS, then those from helper programs.  There were several places
that risked pulling in a system-supplied copy of libpq headers, for
example, instead of the in-tree files.  (Commit cb36f8ec2 fixed one
instance of that a few months ago, but this exercise found more.)

The Meson build scripts may or may not have any comparable problems,
but I'll leave it to someone else to investigate that.

Reported-by: Charles Samborski 
Author: Tom Lane 
Discussion: 
https://postgr.es/m/70f2155f-27ca-4534-b33d-7750e2063...@demurgos.net
Backpatch-through: 13

Branch
--
REL_15_STABLE

Details
---
https://git.postgresql.org/pg/commitdiff/19857437b07353908c7daac8e9aac86eda35051b

Modified Files
--
config/llvm.m4|  4 ++--
configure | 20 ++--
configure.ac  | 18 +-
src/Makefile.global.in|  2 +-
src/backend/jit/llvm/Makefile |  2 +-
src/interfaces/libpq/Makefile |  2 +-
src/pl/plpython/Makefile  |  2 +-
src/pl/tcl/Makefile   |  2 +-
8 files changed, 26 insertions(+), 26 deletions(-)



pgsql: Don't put library-supplied -L/-I switches before user-supplied o

2025-07-29 Thread Tom Lane
Don't put library-supplied -L/-I switches before user-supplied ones.

For many optional libraries, we extract the -L and -l switches needed
to link the library from a helper program such as llvm-config.  In
some cases we put the resulting -L switches into LDFLAGS ahead of
-L switches specified via --with-libraries.  That risks breaking
the user's intention for --with-libraries.

It's not such a problem if the library's -L switch points to a
directory containing only that library, but on some platforms a
library helper may "helpfully" offer a switch such as -L/usr/lib
that points to a directory holding all standard libraries.  If the
user specified --with-libraries in hopes of overriding the standard
build of some library, the -L/usr/lib switch prevents that from
happening since it will come before the user-specified directory.

To fix, avoid inserting these switches directly into LDFLAGS during
configure, instead adding them to LIBDIRS or SHLIB_LINK.  They will
still eventually get added to LDFLAGS, but only after the switches
coming from --with-libraries.

The same problem exists for -I switches: those coming from
--with-includes should appear before any coming from helper programs
such as llvm-config.  We have not heard field complaints about this
case, but it seems certain that a user attempting to override a
standard library could have issues.

The changes for this go well beyond configure itself, however,
because many Makefiles have occasion to manipulate CPPFLAGS to
insert locally-desirable -I switches, and some of them got it wrong.
The correct ordering is any -I switches pointing at within-the-
source-tree-or-build-tree directories, then those from the tree-wide
CPPFLAGS, then those from helper programs.  There were several places
that risked pulling in a system-supplied copy of libpq headers, for
example, instead of the in-tree files.  (Commit cb36f8ec2 fixed one
instance of that a few months ago, but this exercise found more.)

The Meson build scripts may or may not have any comparable problems,
but I'll leave it to someone else to investigate that.

Reported-by: Charles Samborski 
Author: Tom Lane 
Discussion: 
https://postgr.es/m/70f2155f-27ca-4534-b33d-7750e2063...@demurgos.net
Backpatch-through: 13

Branch
--
REL_16_STABLE

Details
---
https://git.postgresql.org/pg/commitdiff/bbc20c8a9ffdefcabd70ea0c325827fe2b8f5960

Modified Files
--
config/llvm.m4|  4 ++--
configure | 20 ++--
configure.ac  | 18 +-
src/Makefile.global.in|  2 +-
src/backend/jit/llvm/Makefile |  2 +-
src/bin/initdb/Makefile   |  2 +-
src/interfaces/libpq/Makefile |  2 +-
src/pl/plpython/Makefile  |  2 +-
src/pl/tcl/Makefile   |  2 +-
9 files changed, 27 insertions(+), 27 deletions(-)



pgsql: Don't put library-supplied -L/-I switches before user-supplied o

2025-07-29 Thread Tom Lane
Don't put library-supplied -L/-I switches before user-supplied ones.

For many optional libraries, we extract the -L and -l switches needed
to link the library from a helper program such as llvm-config.  In
some cases we put the resulting -L switches into LDFLAGS ahead of
-L switches specified via --with-libraries.  That risks breaking
the user's intention for --with-libraries.

It's not such a problem if the library's -L switch points to a
directory containing only that library, but on some platforms a
library helper may "helpfully" offer a switch such as -L/usr/lib
that points to a directory holding all standard libraries.  If the
user specified --with-libraries in hopes of overriding the standard
build of some library, the -L/usr/lib switch prevents that from
happening since it will come before the user-specified directory.

To fix, avoid inserting these switches directly into LDFLAGS during
configure, instead adding them to LIBDIRS or SHLIB_LINK.  They will
still eventually get added to LDFLAGS, but only after the switches
coming from --with-libraries.

The same problem exists for -I switches: those coming from
--with-includes should appear before any coming from helper programs
such as llvm-config.  We have not heard field complaints about this
case, but it seems certain that a user attempting to override a
standard library could have issues.

The changes for this go well beyond configure itself, however,
because many Makefiles have occasion to manipulate CPPFLAGS to
insert locally-desirable -I switches, and some of them got it wrong.
The correct ordering is any -I switches pointing at within-the-
source-tree-or-build-tree directories, then those from the tree-wide
CPPFLAGS, then those from helper programs.  There were several places
that risked pulling in a system-supplied copy of libpq headers, for
example, instead of the in-tree files.  (Commit cb36f8ec2 fixed one
instance of that a few months ago, but this exercise found more.)

The Meson build scripts may or may not have any comparable problems,
but I'll leave it to someone else to investigate that.

Reported-by: Charles Samborski 
Author: Tom Lane 
Discussion: 
https://postgr.es/m/70f2155f-27ca-4534-b33d-7750e2063...@demurgos.net
Backpatch-through: 13

Branch
--
REL_18_STABLE

Details
---
https://git.postgresql.org/pg/commitdiff/8e5e3ff5564104b5e1c3c459d626967a702ad9fb

Modified Files
--
config/llvm.m4  |  4 ++--
config/programs.m4  |  4 ++--
configure   | 24 
configure.ac| 18 +-
src/Makefile.global.in  |  2 +-
src/backend/jit/llvm/Makefile   |  2 +-
src/bin/initdb/Makefile |  2 +-
src/common/Makefile |  2 +-
src/interfaces/libpq-oauth/Makefile |  2 +-
src/interfaces/libpq/Makefile   |  2 +-
src/pl/plpython/Makefile|  2 +-
src/pl/tcl/Makefile |  2 +-
12 files changed, 33 insertions(+), 33 deletions(-)



pgsql: Don't put library-supplied -L/-I switches before user-supplied o

2025-07-29 Thread Tom Lane
Don't put library-supplied -L/-I switches before user-supplied ones.

For many optional libraries, we extract the -L and -l switches needed
to link the library from a helper program such as llvm-config.  In
some cases we put the resulting -L switches into LDFLAGS ahead of
-L switches specified via --with-libraries.  That risks breaking
the user's intention for --with-libraries.

It's not such a problem if the library's -L switch points to a
directory containing only that library, but on some platforms a
library helper may "helpfully" offer a switch such as -L/usr/lib
that points to a directory holding all standard libraries.  If the
user specified --with-libraries in hopes of overriding the standard
build of some library, the -L/usr/lib switch prevents that from
happening since it will come before the user-specified directory.

To fix, avoid inserting these switches directly into LDFLAGS during
configure, instead adding them to LIBDIRS or SHLIB_LINK.  They will
still eventually get added to LDFLAGS, but only after the switches
coming from --with-libraries.

The same problem exists for -I switches: those coming from
--with-includes should appear before any coming from helper programs
such as llvm-config.  We have not heard field complaints about this
case, but it seems certain that a user attempting to override a
standard library could have issues.

The changes for this go well beyond configure itself, however,
because many Makefiles have occasion to manipulate CPPFLAGS to
insert locally-desirable -I switches, and some of them got it wrong.
The correct ordering is any -I switches pointing at within-the-
source-tree-or-build-tree directories, then those from the tree-wide
CPPFLAGS, then those from helper programs.  There were several places
that risked pulling in a system-supplied copy of libpq headers, for
example, instead of the in-tree files.  (Commit cb36f8ec2 fixed one
instance of that a few months ago, but this exercise found more.)

The Meson build scripts may or may not have any comparable problems,
but I'll leave it to someone else to investigate that.

Reported-by: Charles Samborski 
Author: Tom Lane 
Discussion: 
https://postgr.es/m/70f2155f-27ca-4534-b33d-7750e2063...@demurgos.net
Backpatch-through: 13

Branch
--
REL_14_STABLE

Details
---
https://git.postgresql.org/pg/commitdiff/2dee95bd0cf18d99e4d4778f18a794160a8dcaba

Modified Files
--
config/llvm.m4|  4 ++--
configure | 16 
configure.ac  | 14 +++---
src/Makefile.global.in|  2 +-
src/backend/jit/llvm/Makefile |  2 +-
src/interfaces/libpq/Makefile |  2 +-
src/pl/plpython/Makefile  |  2 +-
src/pl/tcl/Makefile   |  2 +-
8 files changed, 22 insertions(+), 22 deletions(-)



pgsql: Don't put library-supplied -L/-I switches before user-supplied o

2025-07-29 Thread Tom Lane
Don't put library-supplied -L/-I switches before user-supplied ones.

For many optional libraries, we extract the -L and -l switches needed
to link the library from a helper program such as llvm-config.  In
some cases we put the resulting -L switches into LDFLAGS ahead of
-L switches specified via --with-libraries.  That risks breaking
the user's intention for --with-libraries.

It's not such a problem if the library's -L switch points to a
directory containing only that library, but on some platforms a
library helper may "helpfully" offer a switch such as -L/usr/lib
that points to a directory holding all standard libraries.  If the
user specified --with-libraries in hopes of overriding the standard
build of some library, the -L/usr/lib switch prevents that from
happening since it will come before the user-specified directory.

To fix, avoid inserting these switches directly into LDFLAGS during
configure, instead adding them to LIBDIRS or SHLIB_LINK.  They will
still eventually get added to LDFLAGS, but only after the switches
coming from --with-libraries.

The same problem exists for -I switches: those coming from
--with-includes should appear before any coming from helper programs
such as llvm-config.  We have not heard field complaints about this
case, but it seems certain that a user attempting to override a
standard library could have issues.

The changes for this go well beyond configure itself, however,
because many Makefiles have occasion to manipulate CPPFLAGS to
insert locally-desirable -I switches, and some of them got it wrong.
The correct ordering is any -I switches pointing at within-the-
source-tree-or-build-tree directories, then those from the tree-wide
CPPFLAGS, then those from helper programs.  There were several places
that risked pulling in a system-supplied copy of libpq headers, for
example, instead of the in-tree files.  (Commit cb36f8ec2 fixed one
instance of that a few months ago, but this exercise found more.)

The Meson build scripts may or may not have any comparable problems,
but I'll leave it to someone else to investigate that.

Reported-by: Charles Samborski 
Author: Tom Lane 
Discussion: 
https://postgr.es/m/70f2155f-27ca-4534-b33d-7750e2063...@demurgos.net
Backpatch-through: 13

Branch
--
master

Details
---
https://git.postgresql.org/pg/commitdiff/4300d8b6a79d61abb5ca9f901df7bde7a49322b6

Modified Files
--
config/llvm.m4  |  4 ++--
config/programs.m4  |  4 ++--
configure   | 24 
configure.ac| 18 +-
src/Makefile.global.in  |  2 +-
src/backend/jit/llvm/Makefile   |  2 +-
src/bin/initdb/Makefile |  2 +-
src/common/Makefile |  2 +-
src/interfaces/libpq-oauth/Makefile |  2 +-
src/interfaces/libpq/Makefile   |  2 +-
src/pl/plpython/Makefile|  2 +-
src/pl/tcl/Makefile |  2 +-
12 files changed, 33 insertions(+), 33 deletions(-)



pgsql: Don't put library-supplied -L/-I switches before user-supplied o

2025-07-29 Thread Tom Lane
Don't put library-supplied -L/-I switches before user-supplied ones.

For many optional libraries, we extract the -L and -l switches needed
to link the library from a helper program such as llvm-config.  In
some cases we put the resulting -L switches into LDFLAGS ahead of
-L switches specified via --with-libraries.  That risks breaking
the user's intention for --with-libraries.

It's not such a problem if the library's -L switch points to a
directory containing only that library, but on some platforms a
library helper may "helpfully" offer a switch such as -L/usr/lib
that points to a directory holding all standard libraries.  If the
user specified --with-libraries in hopes of overriding the standard
build of some library, the -L/usr/lib switch prevents that from
happening since it will come before the user-specified directory.

To fix, avoid inserting these switches directly into LDFLAGS during
configure, instead adding them to LIBDIRS or SHLIB_LINK.  They will
still eventually get added to LDFLAGS, but only after the switches
coming from --with-libraries.

The same problem exists for -I switches: those coming from
--with-includes should appear before any coming from helper programs
such as llvm-config.  We have not heard field complaints about this
case, but it seems certain that a user attempting to override a
standard library could have issues.

The changes for this go well beyond configure itself, however,
because many Makefiles have occasion to manipulate CPPFLAGS to
insert locally-desirable -I switches, and some of them got it wrong.
The correct ordering is any -I switches pointing at within-the-
source-tree-or-build-tree directories, then those from the tree-wide
CPPFLAGS, then those from helper programs.  There were several places
that risked pulling in a system-supplied copy of libpq headers, for
example, instead of the in-tree files.  (Commit cb36f8ec2 fixed one
instance of that a few months ago, but this exercise found more.)

The Meson build scripts may or may not have any comparable problems,
but I'll leave it to someone else to investigate that.

Reported-by: Charles Samborski 
Author: Tom Lane 
Discussion: 
https://postgr.es/m/70f2155f-27ca-4534-b33d-7750e2063...@demurgos.net
Backpatch-through: 13

Branch
--
REL_17_STABLE

Details
---
https://git.postgresql.org/pg/commitdiff/a644f5fc66a36ff7c630b8480901b6057243da2c

Modified Files
--
config/llvm.m4|  4 ++--
configure | 20 ++--
configure.ac  | 18 +-
src/Makefile.global.in|  2 +-
src/backend/jit/llvm/Makefile |  2 +-
src/bin/initdb/Makefile   |  2 +-
src/interfaces/libpq/Makefile |  2 +-
src/pl/plpython/Makefile  |  2 +-
src/pl/tcl/Makefile   |  2 +-
9 files changed, 27 insertions(+), 27 deletions(-)



pgsql: Don't put library-supplied -L/-I switches before user-supplied o

2025-07-29 Thread Tom Lane
Don't put library-supplied -L/-I switches before user-supplied ones.

For many optional libraries, we extract the -L and -l switches needed
to link the library from a helper program such as llvm-config.  In
some cases we put the resulting -L switches into LDFLAGS ahead of
-L switches specified via --with-libraries.  That risks breaking
the user's intention for --with-libraries.

It's not such a problem if the library's -L switch points to a
directory containing only that library, but on some platforms a
library helper may "helpfully" offer a switch such as -L/usr/lib
that points to a directory holding all standard libraries.  If the
user specified --with-libraries in hopes of overriding the standard
build of some library, the -L/usr/lib switch prevents that from
happening since it will come before the user-specified directory.

To fix, avoid inserting these switches directly into LDFLAGS during
configure, instead adding them to LIBDIRS or SHLIB_LINK.  They will
still eventually get added to LDFLAGS, but only after the switches
coming from --with-libraries.

The same problem exists for -I switches: those coming from
--with-includes should appear before any coming from helper programs
such as llvm-config.  We have not heard field complaints about this
case, but it seems certain that a user attempting to override a
standard library could have issues.

The changes for this go well beyond configure itself, however,
because many Makefiles have occasion to manipulate CPPFLAGS to
insert locally-desirable -I switches, and some of them got it wrong.
The correct ordering is any -I switches pointing at within-the-
source-tree-or-build-tree directories, then those from the tree-wide
CPPFLAGS, then those from helper programs.  There were several places
that risked pulling in a system-supplied copy of libpq headers, for
example, instead of the in-tree files.  (Commit cb36f8ec2 fixed one
instance of that a few months ago, but this exercise found more.)

The Meson build scripts may or may not have any comparable problems,
but I'll leave it to someone else to investigate that.

Reported-by: Charles Samborski 
Author: Tom Lane 
Discussion: 
https://postgr.es/m/70f2155f-27ca-4534-b33d-7750e2063...@demurgos.net
Backpatch-through: 13

Branch
--
REL_13_STABLE

Details
---
https://git.postgresql.org/pg/commitdiff/c5bd803e58162e39e3dcd22f1e8039139c32c1ab

Modified Files
--
config/llvm.m4|  4 ++--
configure | 12 ++--
configure.in  | 10 +-
src/Makefile.global.in|  2 +-
src/backend/jit/llvm/Makefile |  2 +-
src/interfaces/libpq/Makefile |  2 +-
src/pl/plpython/Makefile  |  2 +-
src/pl/tcl/Makefile   |  2 +-
8 files changed, 18 insertions(+), 18 deletions(-)



pgsql: Handle cancel requests with PID 0 gracefully

2025-07-29 Thread Heikki Linnakangas
Handle cancel requests with PID 0 gracefully

If the client sent a query cancel request with backend PID 0, it
tripped an assertion. With assertions disabled, you got this in the
log instead:

LOG:  invalid cancel request with PID 0
LOG:  wrong key in cancel request for process 0

Query cancellations don't even require authentication, so we better
tolerate bogus requests. Fix by turning the assertion into a regular
runtime check.

Spotted while testing libpq behavior with a modified server that
didn't send BackendKeyData to the client.

Backpatch-through: 18

Branch
--
REL_18_STABLE

Details
---
https://git.postgresql.org/pg/commitdiff/fce7da1e73853b21a8084e645ac39354c1476261

Modified Files
--
src/backend/storage/ipc/procsignal.c | 6 +-
1 file changed, 5 insertions(+), 1 deletion(-)



pgsql: Handle cancel requests with PID 0 gracefully

2025-07-29 Thread Heikki Linnakangas
Handle cancel requests with PID 0 gracefully

If the client sent a query cancel request with backend PID 0, it
tripped an assertion. With assertions disabled, you got this in the
log instead:

LOG:  invalid cancel request with PID 0
LOG:  wrong key in cancel request for process 0

Query cancellations don't even require authentication, so we better
tolerate bogus requests. Fix by turning the assertion into a regular
runtime check.

Spotted while testing libpq behavior with a modified server that
didn't send BackendKeyData to the client.

Backpatch-through: 18

Branch
--
master

Details
---
https://git.postgresql.org/pg/commitdiff/613f64712257d4b94e068e77fb0593e0a71d8df1

Modified Files
--
src/backend/storage/ipc/procsignal.c | 6 +-
1 file changed, 5 insertions(+), 1 deletion(-)