]> git.ipfire.org Git - thirdparty/postgresql.git/log
thirdparty/postgresql.git
22 hours agoAllow selecting the git revision to be packaged by "make dist". master github/master
Tom Lane [Fri, 3 May 2024 15:08:50 +0000 (11:08 -0400)] 
Allow selecting the git revision to be packaged by "make dist".

Commit 619bc23a1 changed "make dist" to invoke "git archive",
but hard-wired the call to specify that the HEAD revision should
be packaged.  Our tarball building process needs to be able to
specify which git commit to package (notably, for packaging
back branches).  While we could make that work with some hackery
to operate in detached-HEAD state, it's a lot nicer just to expose
git archive's ability to specify what to package.  Hence, invent
a new make variable PG_GIT_REVISION.  This is undocumented, but
so is "make dist".

Also make corresponding changes in the meson scripts.  We have no
near-term intention of using that for package building, but it
will likely happen eventually, so stay prepared.

Discussion: https://postgr.es/m/3552543.1713909947@sss.pgh.pa.us

23 hours agoFix an assortment of typos
David Rowley [Fri, 3 May 2024 14:33:25 +0000 (02:33 +1200)] 
Fix an assortment of typos

Author: Alexander Lakhin
Discussion: https://postgr.es/m/ae9f2fcb-4b24-5bb0-4240-efbbbd944ca1@gmail.com

24 hours agoFix expected test output
Peter Eisentraut [Fri, 3 May 2024 13:11:41 +0000 (15:11 +0200)] 
Fix expected test output

For builds without lz4, for 8f0a97dfff.

28 hours agoFix segmentation fault in MergeInheritedAttribute()
Peter Eisentraut [Fri, 3 May 2024 09:10:40 +0000 (11:10 +0200)] 
Fix segmentation fault in MergeInheritedAttribute()

While converting a pg_attribute tuple into a ColumnDef,
ColumnDef::compression remains NULL if there is no compression method
set fot the attribute.  Calling strcmp() with NULL
ColumnDef::compression, when comparing compression methods of parents,
causes segmentation fault in MergeInheritedAttribute().  Skip
comparing compression methods if either of them is NULL.

Author: Ashutosh Bapat <ashutosh.bapat@enterprisedb.com>
Reported-by: Alexander Lakhin <exclusion@gmail.com>
Discussion: https://www.postgresql.org/message-id/b22a6834-aacb-7b18-0424-a3f5fe889667%40gmail.com

40 hours agoThrow a more on-point error for publications depending on columns.
Tom Lane [Thu, 2 May 2024 21:36:31 +0000 (17:36 -0400)] 
Throw a more on-point error for publications depending on columns.

Same as 42b041243, except that the trouble case is a publication
WHERE clause that depends on a column.

Again reported by Alexander Lakhin.  Back-patch to v15 where
we added publication WHERE clauses.

Discussion: https://postgr.es/m/548a47bc-87ae-b3df-c6a2-60b9966f808b@gmail.com

46 hours agoDisallow direct change of NO INHERIT of not-null constraints
Alvaro Herrera [Thu, 2 May 2024 15:26:30 +0000 (17:26 +0200)] 
Disallow direct change of NO INHERIT of not-null constraints

We support changing NO INHERIT constraint to INHERIT for constraints in
child relations when adding a constraint to some ancestor relation, and
also during pg_upgrade's schema restore; but other than those special
cases, command ALTER TABLE ADD CONSTRAINT should not be allowed to
change an existing constraint from NO INHERIT to INHERIT, as that would
require to process child relations so that they also acquire an
appropriate constraint, which we may not be in a position to do.  (It'd
also be surprising behavior.)

It is conceivable that we want to allow ALTER TABLE SET NOT NULL to make
such a change; but in that case some more code is needed to implement it
correctly, so for now I've made that throw the same error message.

Also, during the prep phase of ALTER TABLE ADD CONSTRAINT, acquire locks
on all descendant tables; otherwise we might operate on child tables on
which no locks are held, particularly in the mode where a primary key
causes not-null constraints to be created on children.

Reported-by: Alexander Lakhin <exclusion@gmail.com>
Discussion: https://postgr.es/m/7d923a66-55f0-3395-cd40-81c142b5448b@gmail.com

47 hours agoRename libpq trace internal functions
Peter Eisentraut [Thu, 2 May 2024 13:59:27 +0000 (15:59 +0200)] 
Rename libpq trace internal functions

libpq's pqTraceOutputMessage() used to look like this:

    case 'Z':               /* Ready For Query */
        pqTraceOutputZ(conn->Pfdebug, message, &logCursor);
        break;

Commit f4b54e1ed98 introduced macros for protocol characters, so now
it looks like this:

    case PqMsg_ReadyForQuery:
        pqTraceOutputZ(conn->Pfdebug, message, &logCursor);
        break;

But this introduced a disconnect between the symbol in the switch case
and the function name to be called, so this made the manageability of
this file a bit worse.

This patch changes the function names to match, so now it looks like
this:

    case PqMsg_ReadyForQuery:
        pqTraceOutput_ReadyForQuery(conn->Pfdebug, message, &logCursor);
        break;

(This also improves the readability of the file in general, since some
function names like "pqTraceOutputt" were a little hard to read
accurately.)

Some protocol characters have different meanings to and from the
server.  The old code structure had a common function for both, for
example, pqTraceOutputD().  The new structure splits this up into
separate ones to match the protocol message name, like
pqTraceOutput_Describe() and pqTraceOutput_DataRow().

Reviewed-by: Yugo NAGATA <nagata@sraoss.co.jp>
Discussion: https://www.postgresql.org/message-id/flat/575e4f9d-acfe-45e3-b7f1-7e32c579090e%40eisentraut.org

2 days agoDisallow NO INHERIT not-null constraints on partitioned tables
Alvaro Herrera [Thu, 2 May 2024 08:51:46 +0000 (10:51 +0200)] 
Disallow NO INHERIT not-null constraints on partitioned tables

Such constraints are semantically useless and only bring weird cases
along, so reject them.

As a side effect, we can no longer have "throwaway" constraints in
pg_dump for primary keys in partitioned tables, but since they don't
serve any useful purpose, we can just omit them.

Maybe this should be done for all types of constraints, but it's just
not-null ones that acquired this "ability" in the 17 timeframe, so for
the moment I'm not changing anything else.

Per note by Alexander Lakhin.
Discussion: https://postgr.es/m/7d923a66-55f0-3395-cd40-81c142b5448b@gmail.com

2 days agodoc: Fix incorrectly spelled structname
Daniel Gustafsson [Thu, 2 May 2024 08:38:28 +0000 (10:38 +0200)] 
doc: Fix incorrectly spelled structname

Commit 61461a300c1 accidentally misspelled the PGcancelConn struct
using the PQ prefix (which admittedly is a very easy typo to make).
Reported off-list.

Reported-by: Alexander Lakhin <exclusion@gmail.com>
2 days agodoc: Fix description of deterministic flag of CREATE COLLATION
Peter Eisentraut [Thu, 2 May 2024 06:21:18 +0000 (08:21 +0200)] 
doc: Fix description of deterministic flag of CREATE COLLATION

The documentation said that you need to pick a suitable LC_COLLATE
setting in addition to setting the DETERMINISTIC flag.  This would
have been correct if the libc provider supported nondeterministic
collations, but since it doesn't, you actually need to set the LOCALE
option.

Reviewed-by: Kashif Zeeshan <kashi.zeeshan@gmail.com>
Discussion: https://www.postgresql.org/message-id/flat/a71023c2-0ae0-45ad-9688-cf3b93d0d65b%40eisentraut.org

2 days agodoc: Fix description of configure --with-icu option
Peter Eisentraut [Thu, 2 May 2024 05:55:53 +0000 (07:55 +0200)] 
doc: Fix description of configure --with-icu option

It was claiming that the ICU locale provider is used by default, which
is not correct.  (From commit fcb21b3acdc; it was once contemplated to
make it the default, but it wouldn't have been part of that patch in
any case.)

Reviewed-by: Kashif Zeeshan <kashi.zeeshan@gmail.com>
Discussion: https://www.postgresql.org/message-id/flat/a71023c2-0ae0-45ad-9688-cf3b93d0d65b%40eisentraut.org

3 days agoSkip invalid database pg_upgrade test on obsolete servers
Alvaro Herrera [Wed, 1 May 2024 09:50:05 +0000 (11:50 +0200)] 
Skip invalid database pg_upgrade test on obsolete servers

When testing pg_upgrade against an old server, ignore failures on the
check to upgrade invalid databases.  This is necessary because old
servers don't know to raise the appropriate error of the database being
invalid.

This change causes no reduction in coverage, because such old versions
don't know to mark databases invalid when a drop is interrupted; but
testing against such old servers is useful in some circumstances.

Backpatch to 16, where it cherry-picks with minimal conflicts.

On 16, perltidy 20230309 chooses to change an unrelated line.  I let it
do that because that's the version we document as preferred for that
branch, even though it would make other changes to many other files in
the tree.

Discussion: https://postgr.es/m/202404181539.lh42llaesnv3@alvherre.pgsql

3 days agoFix typos and incorrect type in read_stream.c
David Rowley [Wed, 1 May 2024 05:04:52 +0000 (17:04 +1200)] 
Fix typos and incorrect type in read_stream.c

max_ios should be int rather than int16, otherwise there's not much
point in doing:

max_ios = Min(max_ios, PG_INT16_MAX);

Discussion: https://postgr.es/m/CAApHDvr9Un-XpDr_+AFdOGM38O2K8SpfoHimqZ838gguTGYBiQ@mail.gmail.com

3 days agoFix parallel vacuum buffer usage reporting.
Masahiko Sawada [Wed, 1 May 2024 03:34:06 +0000 (12:34 +0900)] 
Fix parallel vacuum buffer usage reporting.

A parallel worker's buffer usage is accumulated to its pgBufferUsage
and then is accumulated into the leader's one at the end of the
parallel vacuum. However, since the leader process used to use
dedicated VacuumPage{Hit, Miss, Dirty} globals for the buffer usage
reporting, the worker's buffer usage was not included, leading to an
incorrect buffer usage report.

To fix the problem, this commit makes vacuum use pgBufferUsage
instruments for buffer usage reporting instead of VacuumPage{Hit,
Miss, Dirty} globals. These global variables are still used by ANALYZE
command and autoanalyze.

This also fixes the buffer usage report of vacuuming on temporary
tables, since the buffers dirtied by MarkLocalBufferDirty() were not
tracked by the VacuumPageDirty variable.

Parallel vacuum was introduced in 13, but the buffer usage reporting
for VACUUM command with the VERBOSE option was implemented in
15. So backpatch to 15.

Reported-by: Anthonin Bonnefoy
Author: Anthonin Bonnefoy
Reviewed-by: Alena Rybakina, Masahiko Sawada
Discussion: https://postgr.es/m/CAO6_XqrQk+QZQcYs_C6nk0cMfHuUWk85vT9CrcA1NffFbAVE2A@mail.gmail.com
Backpatch-through: 15

3 days agoAdd tab completion for EXPLAIN (MEMORY|SERIALIZE)
Michael Paquier [Wed, 1 May 2024 02:59:14 +0000 (11:59 +0900)] 
Add tab completion for EXPLAIN (MEMORY|SERIALIZE)

SERIALIZE has been added in 06286709ee06, and MEMORY in 5de890e3610d.

Author: Jian He
Discussion: https://postgr.es/m/CACJufxH5UbhbCg-oMt7pHOmvNABF2x48Jfefu24FexSqVgzA3g@mail.gmail.com

3 days agoEnsure we allocate NAMEDATALEN bytes for names in Index Only Scans
David Rowley [Wed, 1 May 2024 01:21:21 +0000 (13:21 +1200)] 
Ensure we allocate NAMEDATALEN bytes for names in Index Only Scans

As an optimization, we store "name" columns as cstrings in btree
indexes.

Here we modify it so that Index Only Scans convert these cstrings back
to names with NAMEDATALEN bytes rather than storing the cstring in the
tuple slot, as was happening previously.

Bug: #17855
Reported-by: Alexander Lakhin
Reviewed-by: Alexander Lakhin, Tom Lane
Discussion: https://postgr.es/m/17855-5f523e0f9769a566@postgresql.org
Backpatch-through: 12, all supported versions

3 days agoFix locale options checking in CREATE DATABASE.
Jeff Davis [Wed, 1 May 2024 00:08:49 +0000 (17:08 -0700)] 
Fix locale options checking in CREATE DATABASE.

Discussion: https://postgr.es/m/4ea13583-7305-40b0-8525-58381533e2b1@eisentraut.org
Reported-by: Peter Eisentraut
3 days agoFix one more portability shortcoming in new test_pg_dump test.
Tom Lane [Tue, 30 Apr 2024 14:45:14 +0000 (10:45 -0400)] 
Fix one more portability shortcoming in new test_pg_dump test.

If the bootstrap superuser's name requires quoting, regroleout
will supply double quotes ... but the result of CURRENT_USER
is just the literal name.  Apply quote_ident() to ensure a match.

Per Andrew Dunstan's off-list investigation of buildfarm member
prion's failures.

4 days agodoc: Remove one example related to pg_input_error_info()
Michael Paquier [Tue, 30 Apr 2024 10:24:12 +0000 (19:24 +0900)] 
doc: Remove one example related to pg_input_error_info()

This slightly bloated the contents of the function table for this entry,
without really bringing extra value.

Per discussion with Jian He and David G. Johnston.

Discussion: https://postgr.es/m/CACJufxGdyoBJQMSxwdxNK=k8M5WUth5FDFd4Wq_K4f7+1J2xuQ@mail.gmail.com

4 days agoStabilize regression tests introduced by 259c96fa8f
Alexander Korotkov [Tue, 30 Apr 2024 09:12:43 +0000 (12:12 +0300)] 
Stabilize regression tests introduced by 259c96fa8f

Add the ORDER BY clause to new queries to avoid ordering ambiguity.

Per buildfarm member rorqual.

4 days agoInherit parent's AM for partition MERGE/SPLIT operations
Alexander Korotkov [Tue, 30 Apr 2024 08:55:13 +0000 (11:55 +0300)] 
Inherit parent's AM for partition MERGE/SPLIT operations

This commit makes new partitions created by ALTER TABLE ... SPLIT PARTITION
and ALTER TABLE ... MERGE PARTITIONS commands inherit the paret table access
method.

Reported-by: Alexander Lakhin
Discussion: https://postgr.es/m/84ada05b-be5c-473e-6d1c-ebe5dd21b190%40gmail.com
Reviewed-by: Pavel Borisov
4 days agoAdd tab completion for partition MERGE/SPLIT operations
Alexander Korotkov [Tue, 30 Apr 2024 08:55:10 +0000 (11:55 +0300)] 
Add tab completion for partition MERGE/SPLIT operations

This commit implements psql tab completion for ALTER TABLE ... SPLIT PARTITION
and ALTER TABLE ... MERGE PARTITIONS commands.

Reported-by: Alexander Lakhin
Discussion: https://postgr.es/m/5dee3937-8e9f-cca4-11fb-737709a92b37%40gmail.com
Author: Dagfinn Ilmari Mannsåker, Pavel Borisov

4 days agoRename tables in tests of partition MERGE/SPLIT operations
Alexander Korotkov [Tue, 30 Apr 2024 08:55:07 +0000 (11:55 +0300)] 
Rename tables in tests of partition MERGE/SPLIT operations

Replace "salesman" with "salesperson", "salesmen" with "salespeople".  The
names are both gramatically correct and gender-neutral.

Reported-by: Alexander Lakhin
Discussion: https://postgr.es/m/fdaa003e-919c-cbc9-4f0c-e4546e96bd65%40gmail.com
Reviewed-by: Robert Haas, Pavel Borisov
4 days agoFix error message in check_partition_bounds_for_split_range()
Alexander Korotkov [Tue, 30 Apr 2024 08:55:03 +0000 (11:55 +0300)] 
Fix error message in check_partition_bounds_for_split_range()

Currently, the error message is produced by a system of complex substitutions
making it quite untranslatable and hard to read.  This commit splits this into
4 plain error messages suitable for translation.

Reported-by: Kyotaro Horiguchi
Discussion: https://postgr.es/m/20240408.152402.1485994009160660141.horikyota.ntt%40gmail.com
Reviewed-by: Pavel Borisov
4 days agoMake new partitions with parent's persistence during MERGE/SPLIT
Alexander Korotkov [Tue, 30 Apr 2024 09:00:15 +0000 (12:00 +0300)] 
Make new partitions with parent's persistence during MERGE/SPLIT

The createPartitionTable() function is responsible for creating new partitions
for ALTER TABLE ... MERGE PARTITIONS, and ALTER TABLE ... SPLIT PARTITION
commands.  It emulates the behaviour of CREATE TABLE ... (LIKE ...), where
new table persistence should be specified by the user.  In the table
partitioning persistent of the partition and its parent must match.  So, this
commit makes createPartitionTable() copy the persistence of the parent
partition.

Also, this commit makes createPartitionTable() recheck the persistence after
the new table creation.  This is needed because persistence might be affected
by pg_temp in search_path.

This commit also changes the signature of createPartitionTable() making it
take the parent's Relation itself instead of the name of the parent relation,
and return the Relation of new partition.  That doesn't lead to
complications, because both callers have the parent table open and need to
open the new partition.

Reported-by: Alexander Lakhin
Discussion: https://postgr.es/m/dbc8b96c-3cf0-d1ee-860d-0e491da20485%40gmail.com
Author: Dmitry Koval
Reviewed-by: Alexander Korotkov, Robert Haas, Justin Pryzby, Pavel Borisov
4 days agoDocument the way partition MERGE/SPLIT operations create new partitions
Alexander Korotkov [Tue, 30 Apr 2024 08:54:56 +0000 (11:54 +0300)] 
Document the way partition MERGE/SPLIT operations create new partitions

Reported-by: Justin Pryzby
Discussion: https://postgr.es/m/ZilrByTp-pbz6Mvf%40pryzbyj2023
Reviewed-by: Justin Pryzby
4 days agoChange the way ATExecMergePartitions() handles the name collision
Alexander Korotkov [Tue, 30 Apr 2024 08:54:42 +0000 (11:54 +0300)] 
Change the way ATExecMergePartitions() handles the name collision

The name collision happens when the name of the new partition is the same as
the name of one of the merging partitions.  Currently, ATExecMergePartitions()
first gives the new partition a temporary name and then renames it when old
partitions are deleted.  That negatively influences the naming of related
objects like indexes and constrains, which could inherit a temporary name.

This commit changes the implementation in the following way.  A merging
partition gets renamed first, then the new partition is created with the
right name immediately.  This resolves the issue of the naming of related
objects.

Reported-by: Alexander Lakhin
Discussion: https://postgr.es/m/edfbd846-dcc1-42d1-ac26-715691b687d3%40postgrespro.ru
Author: Dmitry Koval, Alexander Korotkov
Reviewed-by: Robert Haas, Justin Pryzby, Pavel Borisov
4 days agoFix compilation on OpenSSL 1.0.2 and LibreSSL
Heikki Linnakangas [Tue, 30 Apr 2024 05:22:24 +0000 (08:22 +0300)] 
Fix compilation on OpenSSL 1.0.2 and LibreSSL

SSL_AD_NO_APPLICATION_PROTOCOL was introduced in OpenSSL 1.1.0.

While we're at it, add a link to the related OpenSSL github issue to
the comment.

Per buildfarm and Tom Lane.

Discussion: https://www.postgresql.org/message-id/1452995.1714433552@sss.pgh.pa.us

4 days agoForce COLLATE "C" to stabilize ordering, redux.
Tom Lane [Tue, 30 Apr 2024 03:32:05 +0000 (23:32 -0400)] 
Force COLLATE "C" to stabilize ordering, redux.

David Rowley correctly pointed out that I'd collat-ified only
one of the two troublesome queries.  Definitely not my day.

Discussion: https://postgr.es/m/CAApHDvo8pMk5WWFAqwGzuQ-Xh+957W61io_OsCP0oUzqCCODTg@mail.gmail.com

4 days agoForce COLLATE "C" to stabilize ordering in new test_pg_dump queries.
Tom Lane [Tue, 30 Apr 2024 01:36:00 +0000 (21:36 -0400)] 
Force COLLATE "C" to stabilize ordering in new test_pg_dump queries.

Should have thought of the need for this.

(Local testing suggests that we may still not be out of the
woods, but certainly this much is needed.)

Per buildfarm and David Rowley.

Discussion: https://postgr.es/m/CAApHDvo8pMk5WWFAqwGzuQ-Xh+957W61io_OsCP0oUzqCCODTg@mail.gmail.com

4 days agoFix test case from b0c5b215d.
Tom Lane [Tue, 30 Apr 2024 00:23:26 +0000 (20:23 -0400)] 
Fix test case from b0c5b215d.

I'd not checked that this iteration of the test actually worked
with a bootstrap superuser not named 'postgres'.  It didn't,
because the coercion rules for CASE caused us to try to cast
the 'postgres' literal to regrole.  Mea culpa.

Per buildfarm (via Alexander Korotkov)

Discussion: https://postgr.es/m/CAPpHfdsV=iTvH6B858hnH1bLgewYH6cdTnO_eOOw9EOa8kehkA@mail.gmail.com

4 days agoAllow meson builds to run test_pg_dump test in installcheck mode.
Tom Lane [Mon, 29 Apr 2024 23:46:33 +0000 (19:46 -0400)] 
Allow meson builds to run test_pg_dump test in installcheck mode.

This had been disabled because the test "doesn't delete its user".
It doesn't seem like a great idea for the meson tests to act
differently from the makefile tests, though, and the makefiles
had no such exception (which is how come only copperhead noticed
the problem just fixed in 534287403).  In any case, the premise
is false since 936e3fa37, so let's remove the restriction.

Discussion: https://postgr.es/m/2857513.1713733688@sss.pgh.pa.us

4 days agoFix failure to track role dependencies of pg_init_privs entries.
Tom Lane [Mon, 29 Apr 2024 23:26:19 +0000 (19:26 -0400)] 
Fix failure to track role dependencies of pg_init_privs entries.

If an ACL recorded in pg_init_privs mentions a non-pinned role,
that reference must also be noted in pg_shdepend so that we know
that the role can't go away without removing the ACL reference.
Otherwise, DROP ROLE could succeed and leave dangling entries
behind, which is what's causing the recent upgrade-check failures
on buildfarm member copperhead.

This has been wrong since pg_init_privs was introduced, but it's
escaped notice because typical pg_init_privs entries would only
mention the bootstrap superuser (pinned) or at worst the owner
of the extension (who can't go away before the extension does).

We lack even a representation of such a role reference for
pg_shdepend.  My first thought for a solution was entries listing
pg_init_privs in classid, but that doesn't work because then there's
noplace to put the granted-on object's classid.  Rather than adding
a new column to pg_shdepend, let's add a new deptype code
SHARED_DEPENDENCY_INITACL.  Much of the associated boilerplate
code can be cribbed from code for SHARED_DEPENDENCY_ACL.

A lot of the bulk of this patch just stems from the new need to pass
the object's owner ID to recordExtensionInitPriv, so that we can
consult it while updating pg_shdepend.  While many callers have that
at hand already, a few places now need to fetch the owner ID of an
arbitrary privilege-bearing object.  For that, we assume that there
is a catcache on the relevant catalog's OID column, which is an
assumption already made in ExecGrant_common so it seems okay here.

We do need an entirely new routine RemoveRoleFromInitPriv to perform
cleanup of pg_init_privs ACLs during DROP OWNED BY.  It's analogous
to RemoveRoleFromObjectACL, but we can't share logic because that
function operates by building a command parsetree and invoking
existing GRANT/REVOKE infrastructure.  There is of course no SQL
command that would update pg_init_privs entries when we're not in
process of creating their extension, so we need a routine that can
do the updates directly.

catversion bump because this changes the expected contents of
pg_shdepend.  For the same reason, there's no hope of back-patching
this, even though it fixes a longstanding bug.  Fortunately, the
case where it's a problem seems to be near nonexistent in the field.
If it weren't for the buildfarm breakage, I'd have been content to
leave this for v18.

Patch by me; thanks to Daniel Gustafsson for review and discussion.

Discussion: https://postgr.es/m/1745535.1712358659@sss.pgh.pa.us

4 days agoAvoid repeating loads of frozen ID values.
Noah Misch [Mon, 29 Apr 2024 17:25:33 +0000 (10:25 -0700)] 
Avoid repeating loads of frozen ID values.

Repeating loads of inplace-updated fields tends to cause bugs like the
one from the previous commit.  While there's no bug to fix in these code
sites, adopt the load-once style.  This improves the chance of future
copy/paste finding the safe style.

Discussion: https://postgr.es/m/20240423003956.e7.nmisch@google.com

4 days agoClose race condition between datfrozen and relfrozen updates.
Noah Misch [Mon, 29 Apr 2024 17:24:56 +0000 (10:24 -0700)] 
Close race condition between datfrozen and relfrozen updates.

vac_update_datfrozenxid() did multiple loads of relfrozenxid and
relminmxid from buffer memory, and it assumed each would get the same
value.  Not so if a concurrent vac_update_relstats() did an inplace
update.  Commit 2d2e40e3befd8b9e0d2757554537345b15fa6ea2 fixed the same
kind of bug in vac_truncate_clog().  Today's bug could cause the
rel-level field and XIDs in the rel's rows to precede the db-level
field.  A cluster having such values should VACUUM affected tables.
Back-patch to v12 (all supported versions).

Discussion: https://postgr.es/m/20240423003956.e7.nmisch@google.com

4 days agoReject SSL connection if ALPN is used but there's no common protocol
Heikki Linnakangas [Mon, 29 Apr 2024 15:12:26 +0000 (18:12 +0300)] 
Reject SSL connection if ALPN is used but there's no common protocol

If the client supports ALPN but tries to use some other protocol, like
HTTPS, reject the connection in the server. That is surely a confusion
of some sort. Furthermore, the ALPN RFC 7301 says:

> In the event that the server supports no protocols that the client
> advertises, then the server SHALL respond with a fatal
> "no_application_protocol" alert.

This commit makes the server follow that advice.

In the client, specifically check for the OpenSSL error code for the
"no_application_protocol" alert. Otherwise you got a cryptic "SSL
error: SSL error code 167773280" error if you tried to connect to a
non-PostgreSQL server that rejects the connection with
"no_application_protocol". ERR_reason_error_string() returns NULL for
that code, which frankly seems like an OpenSSL bug to me, but we can
easily print a better message ourselves.

Reported-by: Jacob Champion
Discussion: https://www.postgresql.org/message-id/6aedcaa5-60f3-49af-a857-2c76ba55a1f3@iki.fi

4 days agolibpq: Enforce ALPN in direct SSL connections
Heikki Linnakangas [Mon, 29 Apr 2024 15:12:24 +0000 (18:12 +0300)] 
libpq: Enforce ALPN in direct SSL connections

ALPN is mandatory with direct SSL connections. That is documented, and
the server checks it, but libpq was missing the check.

Reported-by: Jacob Champion
Reviewed-by: Michael Paquier
Discussion: https://www.postgresql.org/message-id/CAOYmi+=sj+1uydS0NR4nYzw-LRWp3Q-s5speBug5UCLSPMbvGA@mail.gmail.com

4 days agolibpq: Fix error messages when server rejects SSL or GSS
Heikki Linnakangas [Mon, 29 Apr 2024 15:12:21 +0000 (18:12 +0300)] 
libpq: Fix error messages when server rejects SSL or GSS

These messages were lost in commit 05fd30c0e7. Put them back.

This makes one change in the error message behavior compared to v16,
in the case that the server responds to GSSRequest with an error
instead of rejecting it with 'N'. Previously, libpq would hide the
error that the server sent, assuming that you got the error because
the server is an old pre-v12 version that doesn't understand the
GSSRequest message. A v11 server sends a "FATAL: unsupported frontend
protocol 1234.5680: server supports 2.0 to 3.0" error if you try to
connect to it with GSS. That was a reasonable assumption when the
feature was introduced, but v12 was released a long time ago and I
don't think it's the most probable cause anymore. The attached patch
changes things so that libpq prints the error message that the server
sent in that case, making the "server responds with error to
GSSRequest" case behave the same as the "server responds with error to
SSLRequest" case.

Reported-by: Peter Eisentraut
Discussion: https://www.postgresql.org/message-id/bb3b94da-afc7-438d-8940-cb946e553d9d@eisentraut.org

5 days agoMake two-phase tests of ECPG and main suite more concurrent-proof
Michael Paquier [Mon, 29 Apr 2024 12:10:41 +0000 (21:10 +0900)] 
Make two-phase tests of ECPG and main suite more concurrent-proof

The ECPG and main 2PC tests have been using rather-generic names for the
prepared transactions they generate.  This commit switches the 2PC
transactions to use more complex GIDs, reducing the risk of naming
conflicts.

The main 2PC tests also include scans of pg_prepared_xacts that do not
apply filters on the GID of the prepared transactions, making it
possible to fail the test when any 2PC transaction runs concurrently.
The CI has been able to see such failures with an installcheck
running the ECPG and the main regression test suites in parallel.  The
queries on pg_prepared_xacts gain quals to only look after the GIDs
generated locally.

The race is very hard to reproduce, so no backbatch is done for now.

Reported-by: Richard Guo
Discussion: https://postgr.es/m/CAMbWs4-mWCGbbE_bne5=AfqjYGDaUZmjCw2+soLjrdNA0xUDFw@mail.gmail.com

5 days agolibpq: If ALPN is not used, make PQsslAttribute(conn, "alpn") == ""
Heikki Linnakangas [Mon, 29 Apr 2024 09:26:46 +0000 (12:26 +0300)] 
libpq: If ALPN is not used, make PQsslAttribute(conn, "alpn") == ""

The documentation says that PQsslAttribute(conn, "alpn") returns an
empty string if ALPN is not used, but the code actually returned
NULL. Fix the code to match the documentation.

Reported-by: Michael Paquier
Discussion: https://www.postgresql.org/message-id/ZideNHji0G4gxmc3@paquier.xyz

5 days agoRevert "Add GUC backtrace_on_internal_error"
Peter Eisentraut [Mon, 29 Apr 2024 08:49:42 +0000 (10:49 +0200)] 
Revert "Add GUC backtrace_on_internal_error"

This reverts commit a740b213d4b4d3360ad0cac696e47e5ec0eb8864.

Subsequent discussion showed that there was interest in a more general
facility to configure when server log events would produce backtraces,
and this existing limited way couldn't be extended in a compatible
way.  So the consensus was to revert this for PostgreSQL 17 and
reconsider this topic for PostgreSQL 18.

Discussion: https://www.postgresql.org/message-id/flat/CAGECzQTChkvn5Xj772LB3%3Dxo2x_LcaO5O0HQvXqobm1xVp6%2B4w%40mail.gmail.com#764bcdbb73e162787e1ad984935e51e3

5 days agoFix documentation and comments on what happens after GSS rejection
Heikki Linnakangas [Sun, 28 Apr 2024 19:39:35 +0000 (22:39 +0300)] 
Fix documentation and comments on what happens after GSS rejection

The paragraph in the docs and the comment applied to
sslnegotiaton=direct, but not sslnegotiation=requiredirect. In
'requiredirect' mode, negotiated SSL is never used. Move the paragraph
in the docs under the description of 'direct' mode, and rephrase it.

Also the comment's reference to reusing a plaintext connection was
bogus. Authentication failure in plaintext mode only happens after
sending the startup packet, so the connection cannot be reused.

Reported-by: Jacob Champion
Discussion: https://www.postgresql.org/message-id/CAOYmi+=sj+1uydS0NR4nYzw-LRWp3Q-s5speBug5UCLSPMbvGA@mail.gmail.com

5 days agoThrow a more on-point error for functions depending on columns.
Tom Lane [Sun, 28 Apr 2024 18:34:21 +0000 (14:34 -0400)] 
Throw a more on-point error for functions depending on columns.

ALTER COLUMN TYPE wasn't expecting to find any pg_proc objects
depending on the column whose type is to be altered.  That indeed
wasn't possible when this code was written, but it is possible
since we introduced new-style SQL function bodies.

It's about as difficult to fix this case as it is to fix dependent
views, and we've been punting on those for years, so I don't feel
too awful about punting for functions too.  (I sure wouldn't risk
back-patching such code.)  So just throw a more user-facing error.
Also, adjust some of the existing comments to reflect that these
are all pretty much the same issue.

(This patch also fixes it so we will tolerate finding such a
dependency during ALTER COLUMN SET EXPRESSION; in that, we need
not do anything to the function, so no error is wanted.  That
problem is new in HEAD.)

Per bug #18449 from Alexander Lakhin.  Back-patch to v14 where
we added new-style SQL functions.

Discussion: https://postgr.es/m/18449-f8248467aaa294d5@postgresql.org

5 days agoDetect more overflows in timestamp[tz]_pl_interval.
Tom Lane [Sun, 28 Apr 2024 17:42:13 +0000 (13:42 -0400)] 
Detect more overflows in timestamp[tz]_pl_interval.

In commit 25cd2d640 I (tgl) opined that "The additions of the months
and microseconds fields could also overflow, of course.  However,
I believe we need no additional checks there; the existing range
checks should catch such cases".  This is demonstrably wrong however
for the microseconds field, and given that discovery it seems prudent
to be paranoid about the months addition as well.

Report and patch by Joseph Koshakow.  As before, back-patch to all
supported branches.  (However, the test case doesn't work before
v15 because we didn't allow wider-than-int32 numbers in interval
literals.  A variant test could probably be built that fits within
that restriction, but it didn't seem worth the trouble.)

Discussion: https://postgr.es/m/CAAvxfHf77sRHKoEzUw9_cMYSpbpNS2C+J_+8Dq4+0oi8iKopeA@mail.gmail.com

6 days agoFix duplicated consecutive words in comments
David Rowley [Sun, 28 Apr 2024 08:03:34 +0000 (20:03 +1200)] 
Fix duplicated consecutive words in comments

Also, fix a comment incorrectly referencing the "streaming read API".
This was renamed to "read stream" shortly before being committed.

Discussion: https://postgr.es/m/CAApHDvq-2Zdqytm_Hf3RmVf0qg5PS9jTFAJ5QTc9xH9pwvwDTA@mail.gmail.com

7 days agoRemove redundant JSON parser typedefs
Andrew Dunstan [Sat, 27 Apr 2024 11:02:57 +0000 (07:02 -0400)] 
Remove redundant JSON parser typedefs

JsonNonTerminal and JsonParserSem were added in commit 3311ea86ed

These names of these two enums are not actually used, so there is no
need for typedefs. Instead use plain enums to declare the constants.

Noticed by Alvaro Herera.

7 days agoSmall cosmetic fixes in radix tree template
John Naylor [Sat, 27 Apr 2024 07:42:01 +0000 (14:42 +0700)] 
Small cosmetic fixes in radix tree template

- Bring memory context names in line with other naming
- Fix typos, reported off-list by Alexander Lakhin
- Remove copy-paste errors from comments
- Remove duplicate #undef

8 days agoMinor fixes to pg_combinebackup and its documentation.
Robert Haas [Fri, 26 Apr 2024 12:42:42 +0000 (08:42 -0400)] 
Minor fixes to pg_combinebackup and its documentation.

The --tablespace-mapping option was specified with required_argument
rather than no_argument, which is wrong. Since the actual argument
string passed to getopt_long() included "T:", the single-character
form of the option still worked, but the long form did not. Repair.

The call to getopt_long() erroneously included "P", which doesn't
correspond to any supported option. Remove.

The help message used "do not" in one place and "don't" in another.
Standardize on "do not".

The documentation erroneously stated that the tablespace mappings
would be applied relative to the pathnames in the first backup
specified on the command line, rather than the final one. Fix.

Thanks to Tomas Vondra and Daniel Gustafsson for alerting me to
these mistakes.

Discussion: http://postgr.es/m/CA+TgmoYFznwwaZhHSF1Ze7JeyBv-1yOoSrucKMw37WpF=7RP8g@mail.gmail.com

8 days agopg_combinebackup: Detect checksum mismatches and document limitation.
Robert Haas [Thu, 25 Apr 2024 18:58:59 +0000 (14:58 -0400)] 
pg_combinebackup: Detect checksum mismatches and document limitation.

If not all backups have the same checksum status, but the final backup
has checksums enabled, then the output directory may include pages
with invalid checksums. Document this limitation and explain how to
work around it.

In a future release, we may want to teach pg_combinebackup to
recompute page checksums when required, but as feature freeze has come
and gone, it seems a bit too late to do that for this release.

Patch by me, reviewed by Daniel Gustafsson

Discussion: http://postgr.es/m/CA+TgmoZugzOSmgkx97u3pc0M7U8LycWvugqoyWBv6j15a4hE5g@mail.gmail.com

8 days agoAvoid unnecessary "touch meson.build" in vpath builds
Andres Freund [Thu, 25 Apr 2024 14:51:33 +0000 (07:51 -0700)] 
Avoid unnecessary "touch meson.build" in vpath builds

In e6927270cd1 I added a 'touch meson.build' to configure.ac, to ensure
conflicts between in-tree configure based builds and meson builds are
automatically detected. Unfortunately I omitted spaces around the condition
restricting this to in-tree builds, leading to touch meson.build to also be
executed in vpath builds. While the only consequence of this buglet is an
unnecessary empty file in build directories, it seems worth backpatching.

Reported-by: Christoph Berg <myon@debian.org>
Discussion: https://postgr.es/m/20240417230002.mb2gv3hyetyn67gk@awork3.anarazel.de
Backpatch: 16-, where the meson based build was added

9 days agoradixtree: Fix SIGSEGV at update of embeddable value to non-embeddable.
Masahiko Sawada [Thu, 25 Apr 2024 12:48:52 +0000 (21:48 +0900)] 
radixtree: Fix SIGSEGV at update of embeddable value to non-embeddable.

Also, fix a memory leak when updating from non-embeddable to
embeddable. Both were unreachable without adding C code.

Reported-by: Noah Misch
Author: Noah Misch
Reviewed-by: Masahiko Sawada, John Naylor
Discussion: https://postgr.es/m/20240424210319.4c.nmisch%40google.com

9 days agodoc: Add link to table
Peter Eisentraut [Thu, 25 Apr 2024 12:03:42 +0000 (14:03 +0200)] 
doc: Add link to table

Formal tables should generally have an xref in the text that points to
them.  Add them here.

9 days agoPost-commit review fixes for slot synchronization.
Amit Kapila [Thu, 25 Apr 2024 08:31:44 +0000 (14:01 +0530)] 
Post-commit review fixes for slot synchronization.

Allow pg_sync_replication_slots() to error out during promotion of standby.
This makes the behavior of the SQL function consistent with the slot sync
worker. We also ensured that pg_sync_replication_slots() cannot be
executed if sync_replication_slots is enabled and the slotsync worker is
already running to perform the synchronization of slots. Previously, it
would have succeeded in cases when the worker is idle and failed when it
is performing sync which could confuse users.

This patch fixes another issue in the slot sync worker where
SignalHandlerForShutdownRequest() needs to be registered *before* setting
SlotSyncCtx->pid, otherwise, the slotsync worker could miss handling
SIGINT sent by the startup process(ShutDownSlotSync) if it is sent before
worker could register SignalHandlerForShutdownRequest(). To be consistent,
all signal handlers' registration is moved to a prior location before we
set the worker's pid.

Ensure that we clean up synced temp slots at the end of
pg_sync_replication_slots() to avoid such slots being left over after
promotion.

Ensure that ShutDownSlotSync() captures SlotSyncCtx->pid under spinlock to
avoid accessing invalid value as it can be reset by concurrent slot sync
exit due to an error.

Author: Shveta Malik
Reviewed-by: Hou Zhijie, Bertrand Drouvot, Amit Kapila, Masahiko Sawada
Discussion: https://postgr.es/m/CAJpy0uBefXUS_TSz=oxmYKHdg-fhxUT0qfjASW3nmqnzVC3p6A@mail.gmail.com

9 days agoRemove unnecessary code from be_lo_put()
Peter Eisentraut [Thu, 25 Apr 2024 08:08:07 +0000 (10:08 +0200)] 
Remove unnecessary code from be_lo_put()

A permission check is performed in be_lo_put() just after returning
from inv_open(), but the permission is already checked in inv_open(),
so we can remove the second check.

This check was added in 8d9881911f0, but then the refactoring in
ae20b23a9e7 should have removed it.

Author: Yugo NAGATA <nagata@sraoss.co.jp>
Discussion: https://www.postgresql.org/message-id/flat/20240424185932.9789628b99a49ec81b020425%40sraoss.co.jp

9 days agoFix the missing table sync due to improper invalidation handling.
Amit Kapila [Thu, 25 Apr 2024 05:10:52 +0000 (10:40 +0530)] 
Fix the missing table sync due to improper invalidation handling.

We missed performing table sync if the invalidation happened while the
non-ready tables list was being prepared. This occurs because the sync
state was set to valid at the end of non-ready table list preparation
irrespective of the invalidations processed while the list is being
prepared.

Fix it by changing the boolean variable to a tri-state enum and by setting
table state to valid only if no invalidations have occurred while the list
is being prepared.

Reprted-by: Alexander Lakhin
Diagnosed-by: Alexander Lakhin
Author: Vignesh C
Reviewed-by: Hou Zhijie, Alexander Lakhin, Ajin Cherian, Amit Kapila
Backpatch-through: 15
Discussion: https://postgr.es/m/711a6afe-edb7-1211-cc27-1bef8239eec7@gmail.com

9 days agoImprove comment of DeallocateStmt->isall
Michael Paquier [Thu, 25 Apr 2024 01:20:49 +0000 (10:20 +0900)] 
Improve comment of DeallocateStmt->isall

This field is not used directly in the code, but it is important for
query jumbling to be able to make a difference between a named
DEALLOCATE and DEALLOCATE ALL (see bb45156f342c).  This behavior is
tracked in the regression tests of pg_stat_statements, but the reason
why this field is important can be easily missed, as a recent discussion
has proved, so let's improve its comment to document the reason why it
needs to be around.

Wording has been suggested by Tom Lane

Discussion: https://postgr.es/m/Zih1ATt37YFda8_p@paquier.xyz

9 days agoDoc: fix minor oversight in ALTER DEFAULT PRIVILEGES ref page.
Tom Lane [Wed, 24 Apr 2024 14:18:16 +0000 (10:18 -0400)] 
Doc: fix minor oversight in ALTER DEFAULT PRIVILEGES ref page.

Since schemas have more than one kind of privilege, we should
use the synopsis form that shows the privilege being possibly
repeated.

Yugo Nagata

Discussion: https://postgr.es/m/20240424155052.7ac0d0773e4ae27ab723faea@sraoss.co.jp

10 days agoAdd pg_logging_init() calls missing in commit ba3e6e2bca
Andrew Dunstan [Wed, 24 Apr 2024 11:52:52 +0000 (07:52 -0400)] 
Add pg_logging_init() calls missing in commit ba3e6e2bca

As noticed by Michael Paquier.

10 days agoDoc: fix prompt in psql crosstabview example
Daniel Gustafsson [Wed, 24 Apr 2024 11:09:50 +0000 (13:09 +0200)] 
Doc: fix prompt in psql crosstabview example

The prompt in the crosstabview example was incorrectly indicating
an open parenthesis where there is none in the example query. Fix
by changing to the normal multi-line prompt.

Reported-by: y.saburov@gmail.com
Discussion: https://postgr.es/m/171369707837.684.8207966689229976474@wrigleys.postgresql.org

10 days agodoc: Fix up spacing around verbatim DocBook elements
Peter Eisentraut [Wed, 24 Apr 2024 10:26:19 +0000 (12:26 +0200)] 
doc: Fix up spacing around verbatim DocBook elements

10 days agopg_combinebackup: Add --version to --help output
Peter Eisentraut [Wed, 24 Apr 2024 10:12:57 +0000 (12:12 +0200)] 
pg_combinebackup: Add --version to --help output

(It was already on the man page.)

10 days agodoc: Correct jsonpath string literal escapes description
Peter Eisentraut [Wed, 24 Apr 2024 09:31:47 +0000 (11:31 +0200)] 
doc: Correct jsonpath string literal escapes description

The paragraph describing the JavaScript string literals allowed in
jsonpath expressions unnecessarily mentions JSON by erroneously
listing \v as allowed by JSON and mentioning the \xNN and \u{N...}
backslash escapes as deviations from JSON when in fact both are
accepted by ECMAScript/JavaScript.  Fix this by only referring to
JavaScript.

Author: Erik Wienhold <ewie@ewie.name>
Discussion: https://www.postgresql.org/message-id/flat/1EB17DF9-2636-484B-9DD0-3CAB19C4F5C4@justatheory.com

10 days agopg_combinebackup: Put newer options in consistent order in --help and man page
Peter Eisentraut [Wed, 24 Apr 2024 08:47:35 +0000 (10:47 +0200)] 
pg_combinebackup: Put newer options in consistent order in --help and man page

10 days agoSupport SSL_R_VERSION_TOO_LOW when using LibreSSL
Daniel Gustafsson [Wed, 24 Apr 2024 08:54:50 +0000 (10:54 +0200)] 
Support SSL_R_VERSION_TOO_LOW when using LibreSSL

The SSL_R_VERSION_TOO_LOW error reason is supported in LibreSSL since
LibreSSL 3.6.3, shipped in OpenBSD 7.2.  SSL_R_VERSION_TOO_HIGH is on
the other hand not supported in any version of LibreSSL.  Previously
we only checked for SSL_R_VERSION_TOO_HIGH and then applied both under
that guard since OpenSSL has only ever supported both at the same time.
This breaks the check into one per reason to allow SSL_R_VERSION_TOO_LOW
to work when using LibreSSL.

Reviewed-by: Peter Eisentraut <peter@eisentraut.org>
Reviewed-by: Michael Paquier <michael@paquier.xyz>
Discussion: https://postgr.es/m/eac70d46-e61c-4d71-a1e1-78e2bfa19485@eisentraut.org

10 days agoSupport disallowing SSL renegotiation when using LibreSSL
Daniel Gustafsson [Wed, 24 Apr 2024 08:54:42 +0000 (10:54 +0200)] 
Support disallowing SSL renegotiation when using LibreSSL

LibreSSL doesn't support the SSL_OP_NO_RENEGOTIATION macro which is
used by OpenSSL, instead it has invented a similar one for client-
side renegotiation: SSL_OP_NO_CLIENT_RENEGOTIATION. This has been
supported since LibreSSL 2.5.1 which by now can be considered well
below the minimum requirement.

Reviewed-by: Peter Eisentraut <peter@eisentraut.org>
Reviewed-by: Michael Paquier <michael@paquier.xyz>
Discussion: https://postgr.es/m/eac70d46-e61c-4d71-a1e1-78e2bfa19485@eisentraut.org

10 days agoDoc: Use past tense for things which happened in the past
Daniel Gustafsson [Wed, 24 Apr 2024 08:54:36 +0000 (10:54 +0200)] 
Doc: Use past tense for things which happened in the past

The paragraph on SSL compression is largely describing events which
took place many years ago, so reword with past tense.

Reviewed-by: Peter Eisentraut <peter@eisentraut.org>
Reviewed-by: Michael Paquier <michael@paquier.xyz>
Discussion: https://postgr.es/m/eac70d46-e61c-4d71-a1e1-78e2bfa19485@eisentraut.org

10 days agopg_dump: Put new options in consistent order in --help and man page
Peter Eisentraut [Wed, 24 Apr 2024 08:00:58 +0000 (10:00 +0200)] 
pg_dump: Put new options in consistent order in --help and man page

10 days agodoc: Fix order of options on pg_createsubscriber man page
Peter Eisentraut [Wed, 24 Apr 2024 07:19:59 +0000 (09:19 +0200)] 
doc: Fix order of options on pg_createsubscriber man page

Some options were listed in an order that was inconsistent with the
--help output and everything else.

10 days agopg_walsummary: Document --version option
Peter Eisentraut [Wed, 24 Apr 2024 06:56:21 +0000 (08:56 +0200)] 
pg_walsummary: Document --version option

It was working, but it was not shown in the --help output or on the
man page.

10 days agoRemove obsolete symbol from ecpg_config.h.in
Peter Eisentraut [Wed, 24 Apr 2024 06:27:25 +0000 (08:27 +0200)] 
Remove obsolete symbol from ecpg_config.h.in

HAVE_LONG_LONG_INT was not added to ecpg_config.h.in by the meson
build system, but rather than add it there, we decided to remove it
from the makefile build system, to make both consistent that way.

There is no documentation or examples that suggest that the presence
of this symbol was publicly advertised, and of course the feature is
required by C99 (but we don't necessarily require C99 for ecpg user
code).  ecpg core code and ecpg tests use the symbol
HAVE_LONG_LONG_INT_64 instead, which is still there.

Discussion: https://www.postgresql.org/message-id/flat/bf35d032-02fc-4173-9f4f-840999cc3ef3%40eisentraut.org

10 days agoTry again to add test coverage for pg_combinebackup w/tablespaces.
Robert Haas [Tue, 23 Apr 2024 20:33:19 +0000 (16:33 -0400)] 
Try again to add test coverage for pg_combinebackup w/tablespaces.

My previous attempt to add this had to be reverted in commit
82023d47de9e262730b1f9b4ea77fae201a89d0a. I've revised the problematic
code a bit; hopefully it is OK now.

Discussion: http://postgr.es/m/CA+Tgmobiv1QJR5PEJoDKeZDrJHZFRmi4XmWOqufN49DJj-3e2g@mail.gmail.com

10 days agoPost review fixes for test_json_parser test module
Andrew Dunstan [Tue, 23 Apr 2024 19:27:40 +0000 (15:27 -0400)] 
Post review fixes for test_json_parser test module

. Add missing copytight notices
. improve code coverage
. put work files in a temp directory in the standard location
. improve error checking in C code
. indent perl files with perltidy
. add some comments

per comments from Michael Paquier

Discussion: https://postgr.es/m/ZiC3-cdFys4-6xSk@paquier.xyz

10 days agoRemove some unnecessary fields from executor nodes.
Tom Lane [Tue, 23 Apr 2024 16:55:26 +0000 (12:55 -0400)] 
Remove some unnecessary fields from executor nodes.

JsonExprState.input_finfo is only assigned to, never read, and
it's really fairly useless since the value can be gotten out of
the adjacent input_fcinfo field.  Let's remove it before someone
starts to depend on it.

While here, also remove TidScanState.tss_htup and AggState.combinedproj,
which are referenced nowhere.  Those should have been removed by the
commits that caused them to become disused, but were not.

I don't think a catversion bump is necessary here, since plan trees
are never stored on disk.

Matthias van de Meent

Discussion: https://postgr.es/m/CAEze2WjsY4d0TBymLNGK4zpttUcg_YZaTjyWz2VfDUV6YH8wXQ@mail.gmail.com

10 days agoFix code for probing availability of AVX-512.
Nathan Bossart [Tue, 23 Apr 2024 15:54:04 +0000 (10:54 -0500)] 
Fix code for probing availability of AVX-512.

This commit fixes a few things:
* Instead of checking for CPU support of the "xsave" extension, we
  need to check for OS support of XGETBV instructions via the
  "osxsave" flag.
* We must check that additional XCR0 bits are set to be sure the
  ZMM registers are fully enabled.
* We should use the recommended ordering of steps.  Specifically,
  we need to check that the ZMM registers are enabled prior to
  checking for AVX-512 via CPUID.

In passing, split this code into separate functions to improve
readability.

Reported-by: Andrew Kane
Reviewed-by: Akash Shankaran, Raghuveer Devulapalli
Discussion: https://postgr.es/m/20240418024459.GA3385227%40nathanxps13

10 days agoImprove "out of range" error messages for GUCs.
Tom Lane [Tue, 23 Apr 2024 15:52:40 +0000 (11:52 -0400)] 
Improve "out of range" error messages for GUCs.

If the GUC has a unit, label the minimum and maximum values
with the unit explicitly.  Per suggestion from Jian He.

Discussion: https://postgr.es/m/CACJufxFJo6FyVg9W8yvNAxbjP+EJ9wieE9d9vw5LpPzyLnLLOQ@mail.gmail.com

11 days agoFix the handling of the failover option in subscription commands.
Amit Kapila [Tue, 23 Apr 2024 06:44:57 +0000 (12:14 +0530)] 
Fix the handling of the failover option in subscription commands.

Do not allow ALTER SUBSCRIPTION ... SET (failover = on|off) in a
transaction block as the changed failover option of the slot can't be
rolled back. For the same reason, we refrain from altering the replication
slot's failover property if the subscription is created with a valid
slot_name and create_slot=false.

Reprted-by: Kuroda Hayato
Author: Hou Zhijie
Reviewed-by: Shveta Malik, Bertrand Drouvot, Kuroda Hayato
Discussion: https://postgr.es/m/OS0PR01MB57165542B09DFA4943830BF294082@OS0PR01MB5716.jpnprd01.prod.outlook.com

11 days agoRemove unneeded nbtree array preprocessing assert.
Peter Geoghegan [Mon, 22 Apr 2024 17:58:06 +0000 (13:58 -0400)] 
Remove unneeded nbtree array preprocessing assert.

Certain cases involving the use of cursors had assertion failures within
_bt_preprocess_keys's recently added no-op return path.  The assertion
in question made the faulty assumption that a second or third call to
_bt_preprocess_keys (within the same btrescan) could only happen when
another scheduled primitive index scan was just about to begin.

It would be possible to address the problem by only allowing scans that
have array keys to take the new no-op path, forcing affected cases to
perform redundant preprocessing work.  It seems simpler to just remove
the assertion, and reframe the no-op path as a more general mechanism.
Take this simpler approach.

The important underlying principle is that we only need to perform
preprocessing once per btrescan (at most).  This is expected regardless
of whether or not the scan happens to have array keys.

Oversight in commit 1b134ca5, which enhanced nbtree ScalarArrayOp
execution.

Reported-By: Alexander Lakhin <exclusion@gmail.com>
Discussion: https://postgr.es/m/ef0f7c8b-a6fa-362e-6fd6-054950f947ca@gmail.com

12 days agoUpdate src/common/unicode/.gitignore
Peter Eisentraut [Sun, 21 Apr 2024 16:41:57 +0000 (18:41 +0200)] 
Update src/common/unicode/.gitignore

for new downloaded files and new build results.

12 days agoUpdate Unicode data to CLDR 45
Peter Eisentraut [Sun, 21 Apr 2024 16:40:21 +0000 (18:40 +0200)] 
Update Unicode data to CLDR 45

No actual changes result.

12 days agoFix dumps of partitioned tables with table AMs
Michael Paquier [Mon, 22 Apr 2024 06:15:36 +0000 (15:15 +0900)] 
Fix dumps of partitioned tables with table AMs

pg_dump/restore failed to properly set the table access method for
partitioned tables, as it relies on SET queries that would change
default_table_access_method.  However, SET affects only tables and
materialized views, not partitioned tables which would always be
restored with their pg_class.relam set to 0, losing their table AM set
by either a CREATE TABLE .. USING or by a ALTER TABLE .. SET ACCESS
METHOD.

Appending a USING clause to the definition of CREATE TABLE is not
possible as users may specify --no-table-access-method at restore or for
a dump, meaning that the table AM portions may have to be skipped.
Rather than SET, the solution used by this commit is to generate an
extra ALTER TABLE .. SET ACCESS METHOD when restoring a partitioned
table, based on the table AM set in its TOC entry.  The choice of using
a SET query or an ALTER TABLE query for a relation requires the addition
of the relkind to the TOC entry to be able to choose between one or the
other.  Note that using ALTER TABLE SET ACCESS METHOD on a relation with
physical storage would require a full rewrite, which would be costly for
one.  This also creates problems with binary upgrades where the rewrite
would not be able to keep the OID of the relation consistent across the
upgrade.

This commit would normally require a protocol bump, but a45c78e3284b has
already done one for this release cycle.

Regression tests are adjusted with the new expected output, with some
tweaks for the table AMs of the partitions to make the output more
readable.

Issue introduced by 374c7a229042, that has added support for table AMs
in partitioned tables.

Author: Michael Paquier
Reviewed-by: Álvaro Herrera
Discussion: https://postgr.es/m/Zh4JLSvvtQgBJZkZ@paquier.xyz

12 days agoRemove overzealous array element type assertion.
Peter Geoghegan [Mon, 22 Apr 2024 02:51:56 +0000 (22:51 -0400)] 
Remove overzealous array element type assertion.

This led to spurious assertion failures in certain scenarios involving
pseudo types.

Oversight in commit 5bf748b8, which enhanced nbtree ScalarArrayOp
execution.

Reported-By: Richard Guo <guofenglinux@gmail.com>
Discussion: https://postgr.es/m/CAMbWs48f5rDOwxaT76Zd40m7n9iGZQcjEk7vG_5p3YWNh6oPfA@mail.gmail.com

12 days agocreatedb: compare strategy case-insensitive
Tomas Vondra [Sun, 21 Apr 2024 19:21:26 +0000 (21:21 +0200)] 
createdb: compare strategy case-insensitive

When specifying the createdb strategy, the documentation suggests valid
options are FILE_COPY and WAL_LOG, but the code does case-sensitive
comparison and accepts only "file_copy" and "wal_log" as valid.

Fixed by doing a case-insensitive comparison using pg_strcasecmp(), same
as for other string parameters nearby.

While at it, apply fmtId() to a nearby "locale_provider". This already
did the comparison in case-insensitive way, but the value would not be
double-quoted, confusing the parser and the error message.

Backpatch to 15, where the strategy was introduced.

Backpatch-through: 15
Reviewed-by: Tom Lane
Discussion: https://postgr.es/m/90c6913a-1dd2-42b4-8365-ce3b09c39b17@enterprisedb.com

12 days agoMake postgres_fdw request remote time zone 'GMT' not 'UTC'.
Tom Lane [Sun, 21 Apr 2024 17:46:20 +0000 (13:46 -0400)] 
Make postgres_fdw request remote time zone 'GMT' not 'UTC'.

This should have the same results for all practical purposes.
The advantage of selecting 'GMT' is that it's guaranteed to work
even when the remote system's timezone database is missing
entries, because pg_tzset() hard-wires handling of that,
at least in 9.2 and later.

(It seems like it would be a good idea to similarly hard-wire
correct handling of 'UTC', but that'll be a little more invasive
than I want to consider back-patching.  Leave that for another
day when we're not in feature freeze.)

Per trouble report from Adnan Dautovic.  Back-patch to all
supported branches.

Discussion: https://postgr.es/m/465248.1712211585@sss.pgh.pa.us

13 days agocreatedb: Correct parameter name in SGML docs
Tomas Vondra [Sat, 20 Apr 2024 16:54:09 +0000 (18:54 +0200)] 
createdb: Correct parameter name in SGML docs

Commit 9c08aea6a309 introduced -S/--strategy option, but forgot to
rename the parameter when copying the -T/--template bit.

2 weeks agoRemove resowner_private.h
Michael Paquier [Sat, 20 Apr 2024 09:01:03 +0000 (18:01 +0900)] 
Remove resowner_private.h

This header is not used since the refactoring of resource owners done in
b8bff07daa85, and all the functions declared in it became (well, mostly)
static inline local to each resowner kind's code path.

Author: Xing Guo
Discussion: https://postgr.es/m/CACpMh+BFmtK5Z=b6PvH4HLKhUpWa_VtRTZSrB4-yK-tQejpWGw@mail.gmail.com

2 weeks agoDoc: document cases where queryid is stable
David Rowley [Sat, 20 Apr 2024 01:53:35 +0000 (13:53 +1200)] 
Doc: document cases where queryid is stable

The documents were clear that queryid should not be assumed to be stable
between major versions but said nothing about minor versions and left
the reader to guess if that was implied by the mention of the
instability of queryid between major versions.

Here we give minor versions an explicit mention to indicate queryid can
generally be assumed stable between minor versions.

Reviewed-by: Michael Paquier
Discussion: https://postgr.es/m/CAApHDvpYGE6h0cD9UO-eHySPynPj1L3J%3DHxT%2BA7Ud8_Yo6AuzA%40mail.gmail.com
Backpatch-through: 12

2 weeks agoRevert recent ill-advised test case changes.
Robert Haas [Fri, 19 Apr 2024 21:21:56 +0000 (17:21 -0400)] 
Revert recent ill-advised test case changes.

Commit 6bf5c42b5546984df29289918f952e6211069c54 cannot work on Windows,
because it lacks symlink support. While the bug fix in commit
cd64dc42d1e1b03e57e6ba3d316e4f9dec52a78d is correct as far as I know,
the test case changes depend on the previous commit, so this will
have to live without test coverage until we can come up with a better
solution. Commit fa7036dd6644d13233b475874a94754a5903e35a was a test
case bug fix on top of those two, to prevent failures on Linux, so that
has to come out as well.

Per the buildfarm, CI, and Thomas Munro.

2 weeks agoUse tempdir_short instead of tempdir.
Robert Haas [Fri, 19 Apr 2024 19:50:02 +0000 (15:50 -0400)] 
Use tempdir_short instead of tempdir.

After cd64dc42d1e1b03e57e6ba3d316e4f9dec52a78d, a significant
percentage of the buildfarm got unhappy, because pg_basebackup chokes
if it tries to create a tarfile with symlink more than 99 characters
in length. To try to fix that problem, use tempdir_short instead of
tempdir, as we do in pg_verifybackup's 003_corruption.pl.

There's a more complicated workaround for the same issue in
pg_basebackup's 010_pg_basebackup.pl, but I'm not clear whether
there's any reason to do it that way here. For now, let's try this,
to at least get the buildfarm green again.

A better long-term fix would be to figure out how to generate tar
files containing long symlinks, but that will have to wait for
another time.

2 weeks agopg_combinebackup: Fix incorrect tablespace handling.
Robert Haas [Fri, 19 Apr 2024 17:30:42 +0000 (13:30 -0400)] 
pg_combinebackup: Fix incorrect tablespace handling.

The previous coding mangled the pathname calculation for
incremental files located in user-defined tablespaces.

Enhance the test cases to cover such cases, as I should have
done originally. Thanks to Andres Freund for alerting me to the
lack of test coverage.

Discussion: http://postgr.es/m/CA+TgmoYdXTjo9iQeoipTccDpWZzvBNS6EndY2uARM+T4yG_yDg@mail.gmail.com

2 weeks agoMake PostgreSQL::Test::Cluster::init_from_backup handle tablespaces.
Robert Haas [Wed, 17 Apr 2024 19:56:33 +0000 (15:56 -0400)] 
Make PostgreSQL::Test::Cluster::init_from_backup handle tablespaces.

This commit doesn't use this infrastructure for anything new, although
it does adapt 010_pg_basebackup.pl to use it. However, a future commit
will use this to improve test coverage for pg_combinebackup.

Patch by me, reviewed (but not fully endorsed) by Andres Freund.

Discussion: http://postgr.es/m/CA+TgmoYdXTjo9iQeoipTccDpWZzvBNS6EndY2uARM+T4yG_yDg@mail.gmail.com

2 weeks agoAdd missing index_insert_cleanup calls
Tomas Vondra [Fri, 19 Apr 2024 13:47:48 +0000 (15:47 +0200)] 
Add missing index_insert_cleanup calls

The optimization for inserts into BRIN indexes added by c1ec02be1d79
relies on a cache that needs to be explicitly released after calling
index_insert(). The commit however failed to invoke the cleanup in
validate_index(), which calls index_insert() indirectly through
table_index_validate_scan().

After inspecting index_insert() callers, it seems unique_key_recheck()
is missing the call too.

Fixed by adding the two missing index_insert_cleanup() calls.

The commit does two additional improvements. The aminsertcleanup()
signature is modified to have the index as the first argument, to make
it more like the other AM callbacks. And the aminsertcleanup() callback
is invoked even if the ii_AmCache is NULL, so that it can decide if the
cleanup is necessary.

Author: Alvaro Herrera, Tomas Vondra
Reported-by: Alexander Lakhin
Discussion: https://postgr.es/m/202401091043.e3nrqiad6gb7@alvherre.pgsql

2 weeks agoFix a couple typos in BRIN code
Tomas Vondra [Fri, 19 Apr 2024 13:43:14 +0000 (15:43 +0200)] 
Fix a couple typos in BRIN code

Typos introduced by commits c1ec02be1d79b43757171470 and dae761a87eda.

Author: Alvaro Herrera
Reported-by: Alexander Lakhin
Discussion: https://postgr.es/m/202401091043.e3nrqiad6gb7@alvherre.pgsql

2 weeks agoDoc: Remove mention of @ and ~ GiST operators
Daniel Gustafsson [Fri, 19 Apr 2024 12:50:10 +0000 (14:50 +0200)] 
Doc: Remove mention of @ and ~ GiST operators

These operators were removed by 2f70fdb0644c in the v14 cycle but they were
accidentally left in the table of build-in operator classes. Backpatch down
to v14 where the operators where removed.

Author: Aleksander Alekseev <aleksander@timescale.com>
Reported-by: Colin Caine <cmcaine@gmail.com>
Discussion: https://postgr.es/m/CADwQTQbbr2UQ_fpbyc+8ay=RwEYgYk=TZxH3+RHDqAQfoG+EWA@mail.gmail.com
Backpatch-through: v14

2 weeks agoBetter handle indirect constraint drops
Alvaro Herrera [Fri, 19 Apr 2024 10:37:33 +0000 (12:37 +0200)] 
Better handle indirect constraint drops

It is possible for certain cases to remove not-null constraints without
maintaining the attnotnull in its correct state; for example if you drop
a column that's part of the primary key, and the other columns of the PK don't
have not-null constraints, then we should reset the attnotnull flags for
those other columns; up to this commit, we didn't.  Handle those cases
better by doing the attnotnull reset in RemoveConstraintById() instead
of in dropconstraint_internal().

However, there are some cases where we must not do so.  For example if
those other columns are in replica identity indexes or are generated
identity columns, we must keep attnotnull set, even though it results in
the catalog inconsistency that no not-null constraint supports that.

Because the attnotnull reset now happens in more places than before, for
instance when a column of the primary key changes type, we need an
additional trick to reinstate it as necessary.  Introduce a new
alter-table pass that does this, which needs simply reschedule some
AT_SetAttNotNull subcommands that were already being generated and
ignored.

Because of the exceptions in which attnotnull is not reset noted above,
we also include a pg_dump hack to include a not-null constraint when the
attnotnull flag is set even if no pg_constraint row exists.  This part
is undesirable but necessary, because failing to handle the case can
result in unrestorable dumps.

Reported-by: Tender Wang <tndrwang@gmail.com>
Co-authored-by: Tender Wang <tndrwang@gmail.com>
Reviewed-by: jian he <jian.universality@gmail.com>
Discussion: https://postgr.es/m/CAHewXN=hMbNa3d43NOR=OCgdgpTt18S-1fmueCoEGesyeK4bqw@mail.gmail.com

2 weeks agoUse macro NUM_MERGE_MATCH_KINDS instead of '3' in MERGE code.
Dean Rasheed [Fri, 19 Apr 2024 08:40:20 +0000 (09:40 +0100)] 
Use macro NUM_MERGE_MATCH_KINDS instead of '3' in MERGE code.

Code quality improvement for 0294df2f1f84.

Aleksander Alekseev, reviewed by Richard Guo.

Discussion: https://postgr.es/m/CAJ7c6TMsiaV5urU_Pq6zJ2tXPDwk69-NKVh4AMN5XrRiM7N%2BGA%40mail.gmail.com

2 weeks agoRemove unused function prototype
Daniel Gustafsson [Fri, 19 Apr 2024 07:58:04 +0000 (09:58 +0200)] 
Remove unused function prototype

Commit aafc05de1bf5 removed StartSlotSyncWorker() but mistakenly left
the prototype in slotsync.h.  Fix by removing.

Reported-by: Alexander Lakhin <exclusion@gmail.com>
Discussion: https://postgr.es/m/3F577953-A29E-4722-98AD-2DA9EFF2CBB8@yesql.se

2 weeks agoFix incorrect parameter name in prototype
Daniel Gustafsson [Fri, 19 Apr 2024 07:58:00 +0000 (09:58 +0200)] 
Fix incorrect parameter name in prototype

The function declaration for select_next_encryption_method use the
variable name have_valid_connection, so fix the prototype in the
header to match that.

Reported-by: Alexander Lakhin <exclusion@gmail.com>
Discussion: https://postgr.es/m/3F577953-A29E-4722-98AD-2DA9EFF2CBB8@yesql.se

2 weeks agoDoc: Update link to the mentioned subsection
Daniel Gustafsson [Thu, 18 Apr 2024 21:02:39 +0000 (23:02 +0200)] 
Doc: Update link to the mentioned subsection

This updates the link from pg_createsubscriber to initial data sync
to actually link to the subsection in question as opposed to the
main logical replication section.

Author: Pavel Luzanov <p.luzanov@postgrespro.ru>
Discussion: https://postgr.es/m/a4af555a-ac60-4416-877d-0440d29b8763@postgrespro.ru

2 weeks agoFix typos and duplicate words
Daniel Gustafsson [Thu, 18 Apr 2024 19:28:07 +0000 (21:28 +0200)] 
Fix typos and duplicate words

This fixes various typos, duplicated words, and tiny bits of whitespace
mainly in code comments but also in docs.

Author: Daniel Gustafsson <daniel@yesql.se>
Author: Heikki Linnakangas <hlinnaka@iki.fi>
Author: Alexander Lakhin <exclusion@gmail.com>
Author: David Rowley <dgrowleyml@gmail.com>
Author: Nazir Bilal Yavuz <byavuz81@gmail.com>
Discussion: https://postgr.es/m/3F577953-A29E-4722-98AD-2DA9EFF2CBB8@yesql.se

2 weeks agoRemove spurious "the".
Robert Haas [Thu, 18 Apr 2024 17:06:27 +0000 (13:06 -0400)] 
Remove spurious "the".

Spotted by Martin Marqués.

Discussion: http://postgr.es/m/CABeG9LvQMtsKrOkhcA_mKJu1duArw4v+smeJKurYGjPVBZFecg@mail.gmail.com