postgresql.git
22 months agoReword error messages for consistency
Peter Eisentraut [Wed, 28 Jun 2023 17:30:26 +0000 (19:30 +0200)]
Reword error messages for consistency

22 months agoDoc: minor wording adjustments in transaction isolation discussion.
Tom Lane [Wed, 28 Jun 2023 16:48:14 +0000 (12:48 -0400)]
Doc: minor wording adjustments in transaction isolation discussion.

Re-word for more clarity, per gripe from Anton Sidyakin.

Discussion: https://postgr.es/m/168745911769.2239590.6062411529242609290@wrigleys.postgresql.org

22 months agoAdd timeline ID to file names generated with pg_waldump --save-fullpage
Michael Paquier [Wed, 28 Jun 2023 07:26:55 +0000 (16:26 +0900)]
Add timeline ID to file names generated with pg_waldump --save-fullpage

Not including the timeline IDs to the file names generated by pg_waldump
for the individual blocks saved could cause some of these files to be
overwritten when scanning segments across multiple timelines.  Having
this information is also as much useful as the LSNs, to be able to know
from exactly which WAL segment a block is comes from.

While on it, this fixes a few comments in the tests, where the format of
the file was not described as matching with the reality.

Reported-by: Fujii Masao
Reviewed-by: Kyotaro Horiguchi, David Christensen
Discussion: https://postgr.es/m/[email protected]

22 months agoIgnore invalid indexes when enforcing index rules in ALTER TABLE ATTACH PARTITION
Michael Paquier [Wed, 28 Jun 2023 06:57:31 +0000 (15:57 +0900)]
Ignore invalid indexes when enforcing index rules in ALTER TABLE ATTACH PARTITION

A portion of ALTER TABLE .. ATTACH PARTITION is to ensure that the
partition being attached to the partitioned table has a correct set of
indexes, so as there is a consistent index mapping between the
partitioned table and its new-to-be partition.  However, as introduced
in 8b08f7d, the current logic could choose an invalid index as a match,
which is something that can exist when dealing with more than two levels
of partitioning, like attaching a partitioned table (that has
partitions, with an index created by CREATE INDEX ON ONLY) to another
partitioned table.

A partitioned index with indisvalid set to false is equivalent to an
incomplete partition tree, meaning that an invalid partitioned index
does not have indexes defined in all its partitions.  Hence, choosing an
invalid partitioned index can create inconsistent partition index trees,
where the parent attaching to is valid, but its partition may be
invalid.

In the report from Alexander Lakhin, this showed up as an assertion
failure when validating an index.  Without assertions enabled, the
partition index tree would be actually broken, as indisvalid should
be switched to true for a partitioned index once all its partitions are
themselves valid.  With two levels of partitioning, the top partitioned
table used a valid index and was able to link to an invalid index stored
on its partition, itself a partitioned table.

I have studied a few options here (like the possibility to switch
indisvalid to false for the parent), but came down to the conclusion
that we'd better rely on a simple rule: invalid indexes had better never
be chosen, so as the partition attached uses and creates indexes that
the parent expects.  Some regression tests are added to provide some
coverage.  Note that the existing coverage is not impacted.

This is a problem since partitioned indexes exist, so back all the
way down to v11.

Reported-by: Alexander Lakhin
Discussion: https://postgr.es/14987634-43c0-0cb3-e075-94d423607e08@gmail.com
Back-through: 11

22 months agoRemove dependency to query text in JumbleQuery()
Michael Paquier [Tue, 27 Jun 2023 23:59:36 +0000 (08:59 +0900)]
Remove dependency to query text in JumbleQuery()

Since 3db72eb, the query ID of utilities is generated using the Query
structure, making the use of the query string in JumbleQuery()
unnecessary.  This commit removes the argument "querytext" from
JumbleQuery().

Reported-by: Joe Conway
Reviewed-by: Nathan Bossart
Discussion: https://postgr.es/m/[email protected]

22 months agoFix comment on clearing padding.
Heikki Linnakangas [Tue, 27 Jun 2023 07:11:31 +0000 (10:11 +0300)]
Fix comment on clearing padding.

Author: Japin Li
Discussion: https://www.postgresql.org/message-id/MEYP282MB16696317B5DA7D0D92306149B627A@MEYP282MB1669.AUSP282.PROD.OUTLOOK.COM

22 months agoStamp 16beta2. REL_16_BETA2
Tom Lane [Mon, 26 Jun 2023 20:07:19 +0000 (16:07 -0400)]
Stamp 16beta2.

22 months agodoc: PG 16 relnotes, update for beta 2
Bruce Momjian [Mon, 26 Jun 2023 17:44:40 +0000 (13:44 -0400)]
doc:  PG 16 relnotes, update for beta 2

22 months agoTranslation updates
Peter Eisentraut [Mon, 26 Jun 2023 10:02:02 +0000 (12:02 +0200)]
Translation updates

Source-Git-URL: https://git.postgresql.org/git/pgtranslation/messages.git
Source-Git-Hash: ab77975e9d2cde44da796c18af3ec1a66f0df7ae

22 months agoChange "..." to cstring in old input/output function comments.
Heikki Linnakangas [Mon, 26 Jun 2023 08:52:02 +0000 (11:52 +0300)]
Change "..." to cstring in old input/output function comments.

It was not clear what the "..." meant.

Author: Steve Chavez
Discussion: https://www.postgresql.org/message-id/CAGRrpzZzeh7zC3yaVG9di%3DydJ%[email protected]

22 months agoCheck for interrupts and stack overflow in TParserGet().
Tom Lane [Sat, 24 Jun 2023 21:18:08 +0000 (17:18 -0400)]
Check for interrupts and stack overflow in TParserGet().

TParserGet() recurses for some token types, meaning it's possible
to drive it to stack overflow.  Since this is a minority behavior,
I chose to add the check_stack_depth() call to the two places that
recurse rather than doing it during every single call.

While at it, add CHECK_FOR_INTERRUPTS(), because this can run
unpleasantly long for long inputs.

Per bug #17995 from Zuming Jiang.  This is old, so back-
to all supported branches.

Discussion: https://postgr.es/m/17995-9f20ff3e6389db4c@postgresql.org

22 months agodoc: rename "decades" to be more generic
Bruce Momjian [Sat, 24 Jun 2023 02:50:55 +0000 (22:50 -0400)]
doc:  rename "decades" to be more generic

Reported-by: Michael Paquier
Discussion: https://postgr.es/m/[email protected]

Back-through: 11

22 months agoError message refactoring
Peter Eisentraut [Fri, 23 Jun 2023 14:36:17 +0000 (16:36 +0200)]
Error message refactoring

Take some untranslatable things out of the message and replace by
format placeholders, to reduce translatable strings and reduce
translation mistakes.

22 months agodoc: Improve punctuation
Peter Eisentraut [Fri, 23 Jun 2023 12:48:38 +0000 (14:48 +0200)]
doc: Improve punctuation

22 months agodoc: Clean up title case use
Peter Eisentraut [Fri, 23 Jun 2023 12:14:57 +0000 (14:14 +0200)]
doc: Clean up title case use

22 months agoFix incorrect error message in libpq_pipeline
Michael Paquier [Fri, 23 Jun 2023 08:49:07 +0000 (17:49 +0900)]
Fix incorrect error message in libpq_pipeline

One of the tests for the pipeline mode with portal description expects a
non-NULL PQgetResult, but used an incorrect error message on failure,
telling that PQgetResult being NULL was the expected result.

Author: Jelte Fennema
Discussion: https://postgr.es/m/CAGECzQTkShHecFF+EZrm94Lbsu2ej569T=bz+PjMbw9Aiioxuw@mail.gmail.com
Back-through: 14

22 months agoImprove privilege documentation for maintenance commands.
Nathan Bossart [Thu, 22 Jun 2023 22:48:38 +0000 (15:48 -0700)]
Improve privilege documentation for maintenance commands.

The documentation of the required privileges for maintenance
commands (i.e., VACUUM, ANALYZE, CLUSTER, LOCK TABLE, REFRESH
MATERIALIZED VIEW, and REINDEX) is redundant, inaccurate, and
difficult to read.  This commit fixes and simplifies this
documentation by removing references to ownership, superuser, and
the pg_maintain role.  In addition, this removes notes about
database-wide VACUUM and ANALYZE, clarifies matters for REINDEX on
partitioned indexes and tables, and strengthens the description of
the pg_maintain role.

Reviewed-by: Michael Paquier, Jeff Davis
Discussion: https://postgr.es/m/20230615041044.GA736001%40nathanxps13

22 months agoFix cache lookup hazards introduced by ff9618e82a.
Nathan Bossart [Thu, 22 Jun 2023 22:48:20 +0000 (15:48 -0700)]
Fix cache lookup hazards introduced by ff9618e82a.

ff9618e82a introduced has_partition_ancestor_privs(), which is used
to check whether a user has MAINTAIN on any partition ancestors.
This involves syscache lookups, and presently this function does
not take any relation locks, so it is likely subject to the same
kind of cache lookup failures that were fixed by 19de0ab23c.

To fix this problem, this commit partially reverts ff9618e82a.
Specifically, it removes the partition-related changes, including
the has_partition_ancestor_privs() function mentioned above.  This
means that MAINTAIN on a partitioned table is no longer sufficient
to perform maintenance commands on its partitions.  This is more
like how privileges for maintenance commands work on supported
versions.  Privileges are checked for each partition, so a command
that flows down to all partitions might refuse to process them
(e.g., if the current user doesn't have MAINTAIN on the partition).

In passing, adjust a few related comments and error messages, and
add a test for the privilege checks for CLUSTER on a partitioned
table.

Reviewed-by: Michael Paquier, Jeff Davis
Discussion: https://postgr.es/m/20230613211246.GA219055%40nathanxps13

22 months agoDoc: Clarify the behavior of triggers/rules in a logical subscriber.
Amit Kapila [Thu, 22 Jun 2023 07:07:19 +0000 (12:37 +0530)]
Doc: Clarify the behavior of triggers/rules in a logical subscriber.

By default, triggers and rules do not fire on a logical replication
subscriber based on the "session_replication_role" GUC being set to
"replica". However, the docs in the logical replication section assumed
that the reader understood how this GUC worked. This modifies the docs to
be more explicit and links back to the GUC itself.

Author: Jonathan Katz, Peter Smith
Reviewed-by: Vignesh C, Euler Taveira
Back-through: 11
Discussion: https://postgr.es/m/5bb2c9a2-499f-e1a2-6e33-5ce96b35cc4a@postgresql.org

22 months agoDoc: mention that extended stats aren't used for joins
David Rowley [Thu, 22 Jun 2023 00:45:30 +0000 (12:45 +1200)]
Doc: mention that extended stats aren't used for joins

Statistics defined by the CREATE STATISTICS command are only used to
assist with the selectivity estimations of base relations, never for
joins.  Here we mention this fact in the notes section of the CREATE
STATISTICS command.

Discussion: https://postgr.es/m/CAApHDvrMuVgDOrmg_EtFDZ=AOovq6EsJNnHH1ddyZ8EqL4yzMw@mail.gmail.com
Back-through: 11

22 months agonbtree VACUUM: cope with topparent inconsistencies.
Peter Geoghegan [Thu, 22 Jun 2023 00:41:58 +0000 (17:41 -0700)]
nbtree VACUUM: cope with topparent inconsistencies.

Avoid "right sibling %u of block %u is not next child" errors when
vacuuming a corrupt nbtree index.  Just LOG the issue and press on.
That way VACUUM will have a decent chance of finishing off all required
processing for the index (and for the table as a whole).

This is similar to recent work from commit 5abff197, as well as work
from commit 5b861baa (later backed as commit 43e409ce), which
taught nbtree VACUUM to keep going when its "re-find" check fails.  The
hardening added by this commit takes place directly after the "re-find"
check, right before the critical section for the first stage of page
deletion.

Author: Peter Geoghegan <[email protected]>
Discussion: https://postgr.es/m/CAH2-Wz=dayg0vjs4+er84TS9ami=csdzjpuiCGbEw=idhwqhzQ@mail.gmail.com
Back: 11- (all supported versions).

22 months agodoc: update PG history as over "three decades"
Bruce Momjian [Wed, 21 Jun 2023 23:20:07 +0000 (19:20 -0400)]
doc:  update PG history as over "three decades"

Reported-by: Pierre <[email protected]>
Discussion: https://postgr.es/m/168724660637.399156.7642965215720120947@wrigleys.postgresql.org

Back-through: 11

22 months agoICU: do not convert locale 'C' to 'en-US-u-va-posix'.
Jeff Davis [Wed, 21 Jun 2023 20:18:25 +0000 (13:18 -0700)]
ICU: do not convert locale 'C' to 'en-US-u-va-posix'.

Older versions of ICU canonicalize "C" to "en-US-u-va-posix"; but
starting in ICU version 64, the "C" locale is considered
obsolete. Postgres commit ea1db8ae70 introduced code to always
canonicalize "C" to "en-US-u-va-posix" for consistency and
convenience, but it was deemed too confusing.

This commit removes that code, so that "C" is treated like other ICU
locale names: canonicalization is attempted, and if it fails, the
behavior is controlled by icu_validation_level.

A similar change was previously committed as f7faa9976c, then reverted
due to an ICU-version-dependent test failure. This commit un-reverts
it, omitting the test because we now expect the behavior to depend on
the version of ICU being used.

Discussion: https://postgr.es/m/3a200aca-4672-4b37-fc91-5d198a323503%40eisentraut.org
Discussion: https://postgr.es/m/f83f089ee1e9acd5dbbbf3353294d24e1f196e95[email protected]
Discussion: https://postgr.es/m/37520ec1ae9591f83132f82dbd625f3fc2d69c16[email protected]

22 months agoinitdb: change default --locale-provider back to libc.
Jeff Davis [Wed, 21 Jun 2023 18:10:03 +0000 (11:10 -0700)]
initdb: change default --locale-provider back to libc.

Reverts 27b62377b4.

Discussion: https://postgr.es/m/eff031036baa07f325de29215371a4c9e69d61f3[email protected]
Discussion: https://postgr.es/m/3353947.1682092131@sss.pgh.pa.us

22 months agoAvoid Assert failure when processing empty statement in aborted xact.
Tom Lane [Wed, 21 Jun 2023 15:07:11 +0000 (11:07 -0400)]
Avoid Assert failure when processing empty statement in aborted xact.

exec_parse_message() wants to create a cached plan in all cases,
including for empty input.  The empty-input path does not have
a test for being in an aborted transaction, making it possible
that plancache.c will fail due to trying to do database lookups
even though there's no real work to do.

One solution would be to throw an aborted-transaction error in
this path too, but it's not entirely clear whether the lack of
such an error was intentional or whether some clients might be
relying on non-error behavior.  Instead, let's hack plancache.c
so that it treats empty statements with the same logic it
already had for transaction control commands, ensuring that it
can soldier through even in an already-aborted transaction.

Per bug #17983 from Alexander Lakhin.  Back- to all
supported branches.

Discussion: https://postgr.es/m/17983-da4569fcb878672e@postgresql.org

22 months agoAllow and require passing files on command line of pgperltidy
Peter Eisentraut [Wed, 21 Jun 2023 14:14:47 +0000 (16:14 +0200)]
Allow and require passing files on command line of pgperltidy

pgperltidy as well as pgperlcritic and pgperlsyncheck now allow
passing files and directories on the command line, like pgindent does.
(Previously, they would always operate on the whole tree.)

Also, for consistency with pgindent's new behavior (as of b16259b3c1),
passing an argument is now required.  To get the previous default
behavior, use "pgperltidy ." for example.

Discussion: https://www.postgresql.org/message-id/flat/45aacd8a-5265-d9da-8df2-b8e2c0cf6a07%40eisentraut.org

22 months agoDisable use of archiving in 009_twophase.pl
Michael Paquier [Wed, 21 Jun 2023 07:16:15 +0000 (16:16 +0900)]
Disable use of archiving in 009_twophase.pl

This partially reverts 68cb5af, as using archiving to enforce the
rename of the last partial segment of the old timeline at promotion to
use .partial as suffix is impacting the tests when it does switchovers.
As showed by the logs gathered by the CI in the tests that failed, a new
standby may fail to find the WAL segment it needs to follow a promoted
instance with its timeline jump, as it got renamed to .partial.

This problem would manifest as a run timeout with 009_twophase.pl, as
the new standby repeatedly requests a segment from the promoted primary
that it would not find.

Reported-by: Nathan Bossart
Discussion: https://postgr.es/m/20230621043345.GA787473@nathanxps13
Back-through: 13

22 months agoFix the errhint message and docs for drop subscription failure.
Amit Kapila [Wed, 21 Jun 2023 05:06:09 +0000 (10:36 +0530)]
Fix the errhint message and docs for drop subscription failure.

The existing errhint message and docs were missing the fact that we can't
disassociate from the slot unless the subscription is disabled.

Author: Robert Sjöblom, Peter Smith
Reviewed-by: Peter Eisentraut, Amit Kapila
Back-through: 11
Discussion: https://postgr.es/m/807bdf85-61ea-88e2-5712-6d9fcd4eabff@fortnox.se

22 months agoMove bool parameter for vacuum_rel() to option bits.
Nathan Bossart [Tue, 20 Jun 2023 22:14:58 +0000 (15:14 -0700)]
Move bool parameter for vacuum_rel() to option bits.

ff9618e82a introduced the skip_privs parameter, which is used to
skip privilege checks when recursing to a relation's TOAST table.
This parameter should have been added as a flag bit in
VacuumParams->options instead.

Suggested-by: Michael Paquier
Reviewed-by: Michael Paquier, Jeff Davis
Discussion: https://postgr.es/m/ZIj4v1CwqlDVJZfB%40paquier.xyz

22 months agoFix hash join when inner hashkey expressions contain Params.
Tom Lane [Tue, 20 Jun 2023 21:47:36 +0000 (17:47 -0400)]
Fix hash join when inner hashkey expressions contain Params.

If the inner-side expressions contain PARAM_EXEC Params, we must
re-hash whenever the values of those Params change.  The executor
mechanism for that exists already, but we failed to invoke it because
finalize_plan() neglected to search the Hash.hashkeys field for
Params.  This allowed a previous scan's hash table to be re-used
when it should not be, leading to rows missing from the join's output.
(I believe incorrectly-included join rows are impossible however,
since checking the real hashclauses would reject false matches.)

This bug is very ancient, dating probably to d24d75ff1 of 7.4.
Sadly, this simple fix depends on the plan representational changes
made by 2abd7ae9b, so it will only work back to v12.  I thought
about trying to make some kind of hack for v11, but I'm leery
of putting code significantly different from what is used in the
newer branches into a nearly-EOL branch.  Seeing that the bug
escaped detection for a full twenty years, problematic cases
must be rare; so I don't feel too awful about leaving v11 as-is.

Per bug #17985 from Zuming Jiang.  Back- to v12.

Discussion: https://postgr.es/m/17985-748b66607acd432e@postgresql.org

22 months agodocs: adjust tag indenting and add MERGE mention
Bruce Momjian [Tue, 20 Jun 2023 17:15:18 +0000 (13:15 -0400)]
docs:  adjust tag indenting and add MERGE mention

Discussion: https://postgr.es/m/CAMpnoC4_WsY3gsY+ud-Z0GDbafR=K7t7cXn2gatEqFnsRNY3yQ@mail.gmail.com

Author: Will Mortensen

22 months agoFix another cause of "wrong varnullingrels" planner failures.
Tom Lane [Tue, 20 Jun 2023 15:09:56 +0000 (11:09 -0400)]
Fix another cause of "wrong varnullingrels" planner failures.

I removed the delay_upper_joins mechanism in commit b448f1c8d,
reasoning that it was only needed when we have a single-table
(SELECT ... WHERE) as the immediate RHS child of a left join,
and we could get rid of that by hoisting the WHERE condition into
the parent join's quals.  However that new code missed a case:
we could have "foo LEFT JOIN ((SELECT ... WHERE) LEFT JOIN bar)",
and if the two left joins can be commuted then we now have the
problematic query shape.  We can fix this too easily enough,
by allowing the syntactically-lower left join to pass through
its parent qual location pointer recursively.  That lets
prepjointree.c discard the SELECT by temporarily hoisting the
WHERE condition into the ancestor join's qual.

Per bug #17978 from Zuming Jiang.

Discussion: https://postgr.es/m/17978-12f3d93a55297266@postgresql.org

22 months agoDon't include outer join relids in lateral_relids bitmapsets.
Tom Lane [Tue, 20 Jun 2023 14:29:57 +0000 (10:29 -0400)]
Don't include outer join relids in lateral_relids bitmapsets.

This avoids an assertion failure when outer joins are rearranged
per identity 3.  Listing only the baserels from a PlaceHolderVar's
ph_lateral set should be enough to ensure that the required values
are available when we need to compute the PHV --- it's what we
did before inventing nullingrel sets, after all.  It's a bit
unsatisfying; but with beta2 hard upon us, there's not time to
look for an aesthetically cleaner fix.

Richard Guo and Tom Lane

Discussion: https://postgr.es/m/CAMbWs48Jcw-NvnxT23WiHP324wG44DvzcH1j4hc0Zn+3sR9cfg@mail.gmail.com

22 months agoCentralize fixups for mismatched nullingrels in nestloop params.
Tom Lane [Tue, 20 Jun 2023 14:22:52 +0000 (10:22 -0400)]
Centralize fixups for mismatched nullingrels in nestloop params.

It turns out that the fixes we applied in commits bfd332b3f
and 63e4f13d2 were not nearly enough to solve the problem.
We'd focused narrowly on subquery RTEs with lateral references,
but lateral references can occur in several other RTE kinds
such as function RTEs.  Putting the same hack into half a dozen
code paths seems quite unattractive.  Hence, revert the code changes
(but not the test cases) from those commits and instead solve it
centrally in identify_current_nestloop_params(), as Richard proposed
originally.  This is a bit annoying because it could mask erroneous
nullingrels in nestloop params that are generated from non-LATERAL
parameterized paths; but on balance I don't see a better way.
Maybe at some future time we'll be motivated to find a more rigorous
approach to nestloop params, but that's not happening for beta2.

Richard Guo and Tom Lane

Discussion: https://postgr.es/m/CAMbWs48Jcw-NvnxT23WiHP324wG44DvzcH1j4hc0Zn+3sR9cfg@mail.gmail.com

22 months agoAdd b334612b8 to .git-blame-ignore-revs.
Tom Lane [Tue, 20 Jun 2023 13:52:52 +0000 (09:52 -0400)]
Add b334612b8 to .git-blame-ignore-revs.

22 months agoPre-beta2 mechanical code beautification.
Tom Lane [Tue, 20 Jun 2023 13:50:43 +0000 (09:50 -0400)]
Pre-beta2 mechanical code beautification.

Run pgindent and pgperltidy.  It seems we're still some ways
away from all committers doing this automatically.  Now that
we have a buildfarm animal that will whine about poorly-indented
code, we'll try to keep the tree more tidy.

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

22 months agotest_extensions: make meson.build consistent with Makefile.
Jeff Davis [Tue, 20 Jun 2023 01:08:59 +0000 (18:08 -0700)]
test_extensions: make meson.build consistent with Makefile.

Specify --no-locale and --encoding=UTF8 to be consistent with the
Makefile, which specifies NO_LOCALE=1. Fixes test for some locales
when meson is used and ICU is disabled. May have been an oversight in
e6927270cd.

Also switch argument order in unaccent/meson.build to make it
consistent in style.

Discussion: https://postgr.es/m/CABwTF4Wz41pNMJ9q3tpH=6mnvg6aopDU5Lzvers5=6=WJVekww@mail.gmail.com
Author: Gurjeet Singh
Author: Jeff Davis

22 months agoEnable archiving in recovery TAP test 009_twophase.pl
Michael Paquier [Tue, 20 Jun 2023 01:25:27 +0000 (10:25 +0900)]
Enable archiving in recovery TAP test 009_twophase.pl

This is a follow-up of f663b00, that has been committed to v13 and v14,
tweaking the TAP test for two-phase transactions so as it provides
coverage for the bug that has been fixed.  This change is done in its
own commit for clarity, as v15 and HEAD did not show the problematic
behavior, still missed coverage for it.

While on it, this adds a comment about the dependency of the last
partial segment rename and RecoverPreparedTransactions() at the end of
recovery, as that can be easy to miss.

Author: Michael Paquier
Reviewed-by: Kyotaro Horiguchi
Discussion: https://postgr.es/m/743b9b45a2d4013bd90b6a5cba8d6faeb717ee34[email protected]
Back-through: 13

22 months agofd.c: Retry after EINTR in more places
Andres Freund [Mon, 19 Jun 2023 21:11:32 +0000 (14:11 -0700)]
fd.c: Retry after EINTR in more places

Starting with 4d330a61bb1 we can use posix_fallocate() to extend
files. Unfortunately in some situation, e.g. on tmpfs filesystems, EINTR may
be returned. See also 4518c798b2b.

To fix, add a retry path to FileFallocate(). In contrast to 4518c798b2b the
amount we extend by is limited and the extending may happen at a high
frequency, so disabling signals does not appear to be the correct path here.

Also add retry paths to other file operations currently lacking them (around
fdatasync(), fsync(), ftruncate(), posix_fadvise(), sync_file_range(),
truncate()) - they are all documented or have been observed to return EINTR.

Even though most of these functions used in the back branches, it does not
seem worth the risk to back - outside of the new-to-16 case of
posix_fallocate() I am not aware of problem reports due to the lack of
retries.

Reported-by: Christoph Berg <[email protected]>
Discussion: https://postgr.es/m/[email protected]
Back: -

22 months agopg_regress: for --no-locale, use LOCALE='C'.
Jeff Davis [Mon, 19 Jun 2023 18:51:22 +0000 (11:51 -0700)]
pg_regress: for --no-locale, use LOCALE='C'.

Instead of specifying LC_COLLATE='C' and LC_CTYPE='C', specify
LOCALE='C' which will also affect ICU. This makes pg_regress
consistent with recent changes to initdb in commit a14e75eb0b6.

Fixes buildfarm failure.

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

23 months agoDon't use partial unique indexes for unique proofs in the planner
David Rowley [Mon, 19 Jun 2023 01:00:42 +0000 (13:00 +1200)]
Don't use partial unique indexes for unique proofs in the planner

Here we adjust relation_has_unique_index_for() so that it no longer makes
use of partial unique indexes as uniqueness proofs.  It is incorrect to
use these as the predicates used by check_index_predicates() to set
predOK makes use of not only baserestrictinfo quals as proofs, but also
qual from join conditions.  For relation_has_unique_index_for()'s case, we
need to know the relation is unique for a given set of columns before any
joins are evaluated, so if predOK was only set to true due to some join
qual, then it's unsafe to use such indexes in
relation_has_unique_index_for().  The final plan may not even make use
of that index, which could result in reading tuples that are not as
unique as the planner previously expected them to be.

Bug: #17975
Reported-by: Tor Erik Linnerud
Back-through: 11, all supported versions
Discussion: https://postgr.es/m/17975-98a90c156f25c952%40postgresql.org

23 months agoCREATE DATABASE: make LOCALE apply to all collation providers.
Jeff Davis [Fri, 16 Jun 2023 17:27:32 +0000 (10:27 -0700)]
CREATE DATABASE: make LOCALE apply to all collation providers.

For CREATE DATABASE, make LOCALE parameter apply regardless of the
provider used. Also affects initdb and createdb --locale arguments.

Previously, LOCALE (and --locale) only affected the database default
collation when using the libc provider.

Discussion: https://postgr.es/m/1a63084d-221e-4075-619e-6b3e590f673e@enterprisedb.com
Reviewed-by: Peter Eisentraut
23 months agolibpq: Add missing gettext trigger
Peter Eisentraut [Fri, 16 Jun 2023 08:53:22 +0000 (10:53 +0200)]
libpq: Add missing gettext trigger

libpq_ngettext() was missing.  This was an ancient mistake (commit
acd08d764a).

23 months agoAdd missing pg_basebackup TAP test for meson.
Masahiko Sawada [Fri, 16 Jun 2023 01:32:49 +0000 (10:32 +0900)]
Add missing pg_basebackup TAP test for meson.

011_in_place_tablespace was missing from the list of pg_basebackup
tests to run under meson, so add it.

Oversight in 363e8f9115.

Discussion: https://postgr.es/m/CAD21AoDTh1A8bvNBF3LQNQg=27xTpSgvpT+4_yyEj6p4Zv8unA@mail.gmail.com

23 months agoFix typo in comment.
Amit Langote [Fri, 16 Jun 2023 01:04:22 +0000 (10:04 +0900)]
Fix typo in comment.

Back- down to 11.

Author: Sho Kato (<[email protected]>)
Discussion: https://postgr.es/m/TYCPR01MB68499042A33BC32241193AAF9F5BA%40TYCPR01MB6849.jpnprd01.prod.outlook.com

23 months agoWhen removing a left join, clean out references in EquivalenceClasses.
Tom Lane [Thu, 15 Jun 2023 19:24:50 +0000 (15:24 -0400)]
When removing a left join, clean out references in EquivalenceClasses.

Since commit b448f1c8d, we've been able to remove left joins
(that are otherwise removable) even when they are underneath
other left joins, a case that was previously prevented by a
delay_upper_joins check.  This is a clear improvement, but
it has a surprising side-effect: it's now possible that there
are EquivalenceClasses whose relid sets mention the removed
baserel and/or outer join.  If we fail to clean those up,
we may drop essential join quals due to not having any join
level that appears to satisfy their relid sets.

(It's not quite 100% clear that this was impossible before.
But the lack of complaints since we added join removal a dozen
years ago strongly suggests that it was impossible.)

Richard Guo and Tom Lane, per bug #17976 from Zuming Jiang

Discussion: https://postgr.es/m/17976-4b638b525e9a983b@postgresql.org

23 months agoRemove outdated reference to a removed file
Amit Langote [Thu, 15 Jun 2023 09:39:45 +0000 (18:39 +0900)]
Remove outdated reference to a removed file

parse_jsontable.c was removed as part of 2f2b18bd3f55, though its
mention in src/backend/parser/README was not.  Fix that.

Discussion: https://postgr.es/m/CA%2BHiwqHDzw8AP8p_dEkFr0xg458ZTf58zbivAHhK4UeNrx9Tdg%40mail.gmail.com

23 months agolibpq: Fix up some error message coding
Peter Eisentraut [Thu, 15 Jun 2023 11:54:37 +0000 (13:54 +0200)]
libpq: Fix up some error message coding

This applies the new error message API from commit 0873b2d354 to the
changes introduced by bbf9c282ce.  The latter was committed shortly
after the former, so it probably didn't get the news in time.

23 months agoAdd missing subscription TAP test for meson
Michael Paquier [Thu, 15 Jun 2023 08:27:21 +0000 (17:27 +0900)]
Add missing subscription TAP test for meson

033_run_as_table_owner was missing from the list of subscription tests
to run under meson, so add it.

Oversight in 4826759.

Author: Hayato Kuroda
Discussion: https://postgr.es/m/TYAPR01MB58668F4D85A9A122A158F442F55BA@TYAPR01MB5866.jpnprd01.prod.outlook.com

23 months agoReplace GUC_UNIT_MEMORY|GUC_UNIT_TIME with GUC_UNIT.
Masahiko Sawada [Thu, 15 Jun 2023 08:04:19 +0000 (17:04 +0900)]
Replace GUC_UNIT_MEMORY|GUC_UNIT_TIME with GUC_UNIT.

We used (GUC_UNIT_MEMORY | GUC_UNIT_TIME) instead of GUC_UNIT some
places but we already define it in guc.h. This commit replaces them
with GUC_UNIT for better consistency with their surrounding code.

Author: Japin Li
Reviewed-by: Richard Guo, Michael Paquier, Masahiko Sawada
Discussion: https://postgr.es/m/MEYP282MB1669EC0FED922F7A151673ACB65AA@MEYP282MB1669.AUSP282.PROD.OUTLOOK.COM

23 months agointarray: Prevent out-of-bound memory reads with gist__int_ops
Michael Paquier [Thu, 15 Jun 2023 04:45:34 +0000 (13:45 +0900)]
intarray: Prevent out-of-bound memory reads with gist__int_ops

As gist__int_ops stands in intarray, it is possible to store GiST
entries for leaf pages that can cause corruptions when decompressed.
Leaf nodes are stored as decompressed all the time by the compression
method, and the decompression method should map with that, retrieving
the contents of the page without doing any decompression.  However, the
code authorized the insertion of leaf page data with a higher number of
array items than what can be supported, generating a NOTICE message to
inform about this matter (199 for a 8k page, for reference).  When
calling the decompression method, a decompression would be attempted on
this leaf node item but the contents should be retrieved as they are.

The NOTICE message generated when dealing with the compression of a leaf
page and too many elements in the input array for gist__int_ops has been
introduced by 08ee64e, removing the marker stored in the array to track
if this is actually a leaf node.  However, it also missed the fact that
the decompression path should do nothing for a leaf page.  Hence, as the
code stand, a too-large array would be stored as uncompressed but the
decompression path would attempt a decompression rather that retrieving
the contents as they are.

This leads to various problems.  First, even if 08ee64e tried to address
that, it is possible to do out-of-bound chunk writes with a large input
array, with the backend informing about that with WARNINGs.  On
decompression, retrieving the stored leaf data would lead to incorrect
memory reads, leading to crashes or even worse.

Perhaps somebody would be interested in expanding the number of array
items that can be handled in a leaf page for this operator in the
future, which would require revisiting the choice done in 08ee64e, but
based on the lack of reports about this problem since 2005 it does not
look so.  For now, this commit prevents the insertion of data for leaf
pages when using more array items that the code can handle on
decompression, switching the NOTICE message to an ERROR.  If one wishes
to use more array items, gist__intbig_ops is an optional choice.

While on it, use ERRCODE_PROGRAM_LIMIT_EXCEEDED as error code when a
limit is reached, because that's what the module is facing in such
cases.

Author: Ankit Kumar Pandey, Alexander Lakhin
Reviewed-by: Richard Guo, Michael Paquier
Discussion: https://postgr.es/m/796b65c3-57b7-bddf-b0d5-a8afafb8b627@gmail.com
Discussion: https://postgr.es/m/17888-f72930e6b5ce8c14@postgresql.org
Back-through: 11

23 months agoFix possible crash in tablesync worker.
Amit Kapila [Thu, 15 Jun 2023 03:07:48 +0000 (08:37 +0530)]
Fix possible crash in tablesync worker.

Commit c3afe8cf5a added a new password_required option but forgot that you
need database access to check whether an arbitrary role ID is a superuser.

Commit e7e7da2f8d fixed a similar bug in apply worker, and this 
fixes a similar bug in tablesync worker.

Author: Hou Zhijie
Reviewed-by: Amit Kapila
Discussion: https://postgr.es/m/OS0PR01MB571607F5A9D723755268D36294759@OS0PR01MB5716.jpnprd01.prod.outlook.com

23 months agoMake parseNodeString() C idiom compatible with Visual Studio 2015.
Noah Misch [Wed, 14 Jun 2023 12:31:54 +0000 (05:31 -0700)]
Make parseNodeString() C idiom compatible with Visual Studio 2015.

Between v15 and now, this function's "else if" chain grew from 252 lines
to 592 lines, exceeding a compiler limit that manifests as "fatal error
C1026: parser stack overflow, program too complex (compiling source file
src/backend/nodes/readfuncs.c)".  Use "if (...)  return ...;" instead.

Reviewed by Tom Lane, Peter Eisentraut and Michael Paquier.  Not all
reviewers endorse this.

Discussion: https://postgr.es/m/20230607185458[email protected]

23 months agoFix typo in comment.
Masahiko Sawada [Wed, 14 Jun 2023 04:28:41 +0000 (13:28 +0900)]
Fix typo in comment.

Introduced in 4d330a61bb1.

Author: Masahiko Sawada
Reviewed-by: Michael Paquier
Discussion: https://postgr.es/m/CAD21AoDg8rTWJkrNJg9UTP89vS8smfib2c55DVqKrCn8zR-GYA@mail.gmail.com

23 months agoRetain relkind too in RTE_SUBQUERY entries for views.
Amit Langote [Tue, 13 Jun 2023 03:52:47 +0000 (12:52 +0900)]
Retain relkind too in RTE_SUBQUERY entries for views.

47bb9db75 modified the ApplyRetrieveRule()'s conversion of a view's
original RTE_RELATION entry into an RTE_SUBQUERY one to retain relid,
rellockmode, and perminfoindex so that the executor can lock the view
and check its permissions.  It seems better to also retain
relkind for cross-checking that the exception of an
RTE_SUBQUERY entry being allowed to carry relation details only
applies to views, so do so.

Bump catversion because this changes the output format of
RTE_SUBQUERY RTEs.

Suggested-by: David Steele <[email protected]>
Reviewed-by: David Steele <[email protected]>
Reviewed-by: Álvaro Herrera <[email protected]>
Discussion: https://postgr.es/m/3953179e-9540-e5d1-a743-4bef368785b0%40pgmasters.net

23 months agoFix make_etags breakage on certain platforms.
Tatsuo Ishii [Wed, 14 Jun 2023 02:02:50 +0000 (11:02 +0900)]
Fix make_etags breakage on certain platforms.

make_etags produced wrong format TAGS files on platforms such as Mac,
which uses non-Exuberant ctags.

Author: Masahiko Sawada
Reviewed-by: Tatsuo Ishii
Back-through: 15
Discussion: https://postgr.es/m/CAD21AoDmCqpS%2BU6b9Bc-b4OFx3tz%3DNv6O2KVkoVg7sHk60spjA%40mail.gmail.com

23 months agoFix "wrong varnullingrels" for Memoize's lateral references, too.
Tom Lane [Tue, 13 Jun 2023 22:01:33 +0000 (18:01 -0400)]
Fix "wrong varnullingrels" for Memoize's lateral references, too.

The issue fixed in commit bfd332b3f can also bite Memoize plans,
because of the separate copies of lateral reference Vars made
by paraminfo_get_equal_hashops.  Apply the same hacky fix there.

(In passing, clean up shaky grammar in the existing comments
for this function.)

Richard Guo

Discussion: https://postgr.es/m/CAMbWs4-krwk0Wbd6WdufMAupuou_Ua73ijQ4XQCr1Mb5BaVtKQ@mail.gmail.com

23 months agoCorrectly update hasSubLinks while mutating a rule action.
Tom Lane [Tue, 13 Jun 2023 19:58:37 +0000 (15:58 -0400)]
Correctly update hasSubLinks while mutating a rule action.

rewriteRuleAction neglected to check for SubLink nodes in the
securityQuals of range table entries.  This could lead to failing
to convert such a SubLink to a SubPlan, resulting in assertion
crashes or weird errors later in planning.

In passing, fix some poor coding in rewriteTargetView:
we should not pass the source parsetree's hasSubLinks
field to ReplaceVarsFromTargetList's outer_hasSubLinks.
ReplaceVarsFromTargetList knows enough to ignore that
when a Query node is passed, but it's still confusing
and bad precedent: if we did try to update that flag
we'd be updating a stale copy of the parsetree.

Per bug #17972 from Alexander Lakhin.  This has been broken since
we added RangeTblEntry.securityQuals (although the presented test
case only fails back to 215b43cdc), so back- all the way.

Discussion: https://postgr.es/m/17972-f422c094237847d0@postgresql.org

23 months agodoc: Move list entry to proper position
Peter Eisentraut [Tue, 13 Jun 2023 13:00:52 +0000 (15:00 +0200)]
doc: Move list entry to proper position

23 months agoReport stats when replaying XLOG_RUNNING_XACTS
Andres Freund [Mon, 12 Jun 2023 22:06:12 +0000 (15:06 -0700)]
Report stats when replaying XLOG_RUNNING_XACTS

Previously stats in the startup process would only get reported during
shutdown of the startup process. It has been that way for a long time, but
became a lot more noticeable with the new pg_stat_io view, which separates out
IO done by different backend types...

While replaying after every XLOG_RUNNING_XACTS isn't the prettiest approach,
it has the advantage of being quite easy. Given that we're well past feature
freeze...

It's not a problem that we don't report stats more frequently with
wal_level=minimal, in that case stats can't be read before the stats process
has shut down.

Besides the above, this commit also changes pgstat_report_stat() to acquire
the timestamp with GetCurrentTimestamp() instead of
GetCurrentTransactionStopTimestamp().

Thanks to Melih Mutlu, Kyotaro Horiguchi for s of other approaches to
solving this issue.

Reported-by: Fujii Masao <[email protected]>
Discussion: https://postgr.es/m/5315aedc-fbca-1556-c5de-dc2e00b23a14@oss.nttdata.com

23 months agoAccept fractional seconds in jsonpath's datetime() method.
Tom Lane [Mon, 12 Jun 2023 14:54:28 +0000 (10:54 -0400)]
Accept fractional seconds in jsonpath's datetime() method.

Commit 927d9abb6 purported to make datetime() accept any string
that could be output for a datetime value by to_jsonb().  But it
overlooked the possibility of fractional seconds being present,
so that cases as simple as to_jsonb(now()) would defeat it.

Fix by adding formats that include ".US" to the list in
executeDateTimeMethod().  (Note that while this is nominally
microseconds, it'll do the right thing for fractions with
fewer than six digits.)

In passing, re-order the list to restore the datatype ordering
specified in its comment.  The violation accidentally did not
break anything; but the next edit might be less lucky, so add
more comments.

Per report from Tim Field.  Back- to v13 where datetime()
was added, like the previous .

Discussion: https://postgr.es/m/014A028B-5CE6-4FDF-AC24-426CA6FC9CEE@mohiohio.com

23 months agosrc/tools/msvc/clean.bat: Reconcile with PostgreSQL 16 work.
Noah Misch [Mon, 12 Jun 2023 14:40:39 +0000 (07:40 -0700)]
src/tools/msvc/clean.bat: Reconcile with PostgreSQL 16 work.

23 months agosrc/tools/msvc: Move all.sym temporary file back to Debug/postgres.
Noah Misch [Mon, 12 Jun 2023 14:40:39 +0000 (07:40 -0700)]
src/tools/msvc: Move all.sym temporary file back to Debug/postgres.

Commit 70df2df1cc89e69e31b31b6aa0d65fd72935af38 moved it to the
top_srcdir, where it caused "git status" noise.

23 months agoAdd win32ver data to meson-built postgres.exe.
Noah Misch [Mon, 12 Jun 2023 14:40:38 +0000 (07:40 -0700)]
Add win32ver data to meson-built postgres.exe.

As in the older build systems, the resources object is not an input to
postgres.def.

Reviewed by Andres Freund.

Discussion: https://postgr.es/m/20230607231407[email protected]

23 months agoGive postgres.exe the icon of other executables.
Noah Misch [Mon, 12 Jun 2023 14:40:38 +0000 (07:40 -0700)]
Give postgres.exe the icon of other executables.

We had left it icon-free since users won't achieve much by opening it
from Windows Explorer.  Subsequent to that decision, Task Manager
started to show the icon.  That shifts the balance in favor of attaching
the icon, so do so.  No back-, but make this late addition to v16.

Reviewed by Andres Freund and Magnus Hagander.

Discussion: https://postgr.es/m/20230608014507[email protected]

23 months agoFix "wrong varnullingrels" for subquery nestloop parameters.
Tom Lane [Mon, 12 Jun 2023 14:01:26 +0000 (10:01 -0400)]
Fix "wrong varnullingrels" for subquery nestloop parameters.

If we apply outer join identity 3 when relation C is a subquery
having lateral references to relation B, then the lateral references
within C continue to bear the original syntactically-correct
varnullingrels marks, but that won't match what is available from
the outer side of the nestloop.  Compensate for that in
process_subquery_nestloop_params().  This is a slightly hacky fix,
but we certainly don't want to re-plan C in toto for each possible
outer join order, so there's not a lot of better alternatives.

Richard Guo and Tom Lane, per report from Markus Winand

Discussion: https://postgr.es/m/DFBB2D25-DE97-49CA-A60E-07C881EA59A7@winand.at

23 months agoRemove a few unused global variables and declarations.
Heikki Linnakangas [Mon, 12 Jun 2023 13:25:37 +0000 (16:25 +0300)]
Remove a few unused global variables and declarations.

- Commit 3eb77eba5a, which moved the pending ops queue from md.c to
  sync.c, introduced a duplicate, unused 'pendingOpsCxt'
  variable. (I'm surprised none of the compilers or static analysis
  tools have complained about that.)

- Commit c2fe139c20 moved the 'synchronize_seqscans' variable and
  introduced an extern declaration in tableam.h, making the one in
  guc_tables.c unnecessary.

- Commit 6f0cf87872 removed the 'pgstat_temp_directory' GUC, but
  forgot to remove the corresponding global variable.

- Commit 1b4e729eaa removed the 'pg_krb_realm' GUC, and its global
  variable, but forgot the declaration in auth.h.

Spotted all these by reading the code.

23 months agoFix instability in regression test for Parallel Hash Full Join
Michael Paquier [Mon, 12 Jun 2023 03:19:46 +0000 (12:19 +0900)]
Fix instability in regression test for Parallel Hash Full Join

As reported by buildfarm member conchuela, one of the regression tests
added by 558c9d7 is having some ordering issues.  This commit adds an
ORDER BY clause to make the output more stable for the problematic
query.

Fix suggested by Tom Lane.  The plan of the query updated still uses a
parallel hash full join.

Author: Melanie Plageman
Discussion: https://postgr.es/m/623596.1684541098@sss.pgh.pa.us

23 months agohstore: Tighten key/value parsing check for whitespaces
Michael Paquier [Mon, 12 Jun 2023 00:14:03 +0000 (09:14 +0900)]
hstore: Tighten key/value parsing check for whitespaces

isspace() can be locale-sensitive depending on the platform, causing
hstore to consider as whitespaces characters it should not see as such.
For example, U+0105, being decoded as 0xC4 0x85 in UTF-8, would be
discarded from the input given.

This problem is similar to 9ae2661, though it was missed that hstore
can also manipulate non-ASCII inputs, so replace the existing isspace()
calls with scanner_isspace().

This problem exists for a long time, so back all the way down.

Author: Evan Jones
Discussion: https://postgr.es/m/CA+HWA9awUW0+RV_gO9r1ABZwGoZxPztcJxPy8vMFSTbTfi4jig@mail.gmail.com
Back-through: 11

23 months agonbtree: Allocate new pages in separate function.
Peter Geoghegan [Sat, 10 Jun 2023 21:08:25 +0000 (14:08 -0700)]
nbtree: Allocate new pages in separate function.

Split nbtree's _bt_getbuf function is two: code that read locks or write
locks existing pages remains in _bt_getbuf, while code that deals with
allocating new pages is moved to a new, dedicated function called
_bt_allocbuf.  This simplifies most _bt_getbuf callers, since it is no
longer necessary for them to pass a heaprel argument.  Many of the
changes to nbtree from commit 61b313e4 can be reverted.  This minimizes
the divergence between HEAD/PostgreSQL 16 and earlier release branches.

_bt_allocbuf replaces the previous nbtree idiom of passing P_NEW to
_bt_getbuf.  There are only 3 affected call sites, all of which continue
to pass a heaprel for recovery conflict purposes.  Note that nbtree's
use of P_NEW was superficial; nbtree never actually relied on the P_NEW
code paths in bufmgr.c, so this change is strictly mechanical.

GiST already took the same approach; it has a dedicated function for
allocating new pages called gistNewBuffer().  That factor allowed commit
61b313e4 to make much more targeted changes to GiST.

Author: Peter Geoghegan <[email protected]>
Reviewed-By: Heikki Linnakangas <[email protected]>
Discussion: https://postgr.es/m/CAH2-Wz=8Z9qY58bjm_7TAHgtW6RzZ5Ke62q5emdCEy9BAzwhmg@mail.gmail.com

23 months agoAdd another old commit to git-blame-ignore-revs.
Peter Geoghegan [Sat, 10 Jun 2023 20:55:15 +0000 (13:55 -0700)]
Add another old commit to git-blame-ignore-revs.

23 months agoRevert "Fix search_path to a safe value during maintenance operations."
Jeff Davis [Sat, 10 Jun 2023 15:11:02 +0000 (08:11 -0700)]
Revert "Fix search_path to a safe value during maintenance operations."

This reverts commit 05e17373517114167d002494e004fa0aa32d1fd1.

23 months agomeson: Add dependencies to perl modules to various script invocations
Andres Freund [Sat, 10 Jun 2023 03:12:16 +0000 (20:12 -0700)]
meson: Add dependencies to perl modules to various script invocations

Eventually it is likely worth trying to deal with this in a more expansive
way, by generating dependency files generated within the scripts. But it's not
entirely obvious how to do that in perl and is work more suitable for 17
anyway.

Reported-by: Dagfinn Ilmari Mannsåker <[email protected]>
Reviewed-by: Tristan Partin <[email protected]>
Discussion: https://postgr.es/m/[email protected]

23 months agodoc: PG 16 relnotes, add author
Bruce Momjian [Sat, 10 Jun 2023 01:04:28 +0000 (21:04 -0400)]
doc:  PG 16 relnotes, add author

Reported-by: Masahiko Sawada
Discussion: https://postgr.es/m/CAD21AoDP46y+1yUMikYWhCfkhSEuoXmHq2SV8_PyQoM1uWBRbg@mail.gmail.com

23 months agoFix search_path to a safe value during maintenance operations.
Jeff Davis [Fri, 9 Jun 2023 18:20:47 +0000 (11:20 -0700)]
Fix search_path to a safe value during maintenance operations.

While executing maintenance operations (ANALYZE, CLUSTER, REFRESH
MATERIALIZED VIEW, REINDEX, or VACUUM), set search_path to
'pg_catalog, pg_temp' to prevent inconsistent behavior.

Functions that are used for functional indexes, in index expressions,
or in materialized views and depend on a different search path must be
declared with CREATE FUNCTION ... SET search_path='...'.

This change addresses a security risk introduced in commit 60684dd834,
where a role with MAINTAIN privileges on a table may be able to
escalate privileges to the table owner. That commit is not yet part of
any release, so no need to back.

Discussion: https://postgr.es/m/e44327179e5c9015c8dda67351c04da552066017.camel%40j-davis.com
Reviewed-by: Greg Stark
Reviewed-by: Nathan Bossart
23 months agoFix missing word in nbtree/README.
Nathan Bossart [Fri, 9 Jun 2023 04:20:24 +0000 (21:20 -0700)]
Fix missing word in nbtree/README.

Reported-by: Daniel Westermann
Author: Gurjeet Singh
Reviewed-by: Richard Guo
Discussion: https://postgr.es/m/ZR0P278MB0427F0E0CE4ED140F52D1923D250A%40ZR0P278MB0427.CHEP278.PROD.OUTLOOK.COM

23 months agoRefactor routine to find single log content pattern in TAP tests
Michael Paquier [Fri, 9 Jun 2023 02:56:27 +0000 (11:56 +0900)]
Refactor routine to find single log content pattern in TAP tests

The same routine to check if a specific pattern can be found in the
server logs was copied over four different test scripts.  This refactors
the whole to use a single routine located in PostgreSQL::Test::Cluster,
named log_contains, to grab the contents of the server logs and check
for a specific pattern.

On HEAD, the code previously used assumed that slurp_file() could not
handle an undefined offset, setting it to zero, but slurp_file() does
do an extra fseek() before retrieving the log contents only if an offset
is defined.  In two places, the test was retrieving the full log
contents with slurp_file() after calling substr() to apply an offset,
ignoring that slurp_file() would be able to handle that.

Back all the way down to ease the introduction of new tests that
could rely on the new routine.

Author: Vignesh C
Reviewed-by: Andrew Dunstan, Dagfinn Ilmari Mannsåker, Michael Paquier
Discussion: https://postgr.es/m/CALDaNm0YSiLpjCmajwLfidQrFOrLNKPQir7s__PeVvh9U3uoTQ@mail.gmail.com
Back-through: 11

23 months agoHonor run_as_owner option in tablesync worker.
Masahiko Sawada [Fri, 9 Jun 2023 01:43:03 +0000 (10:43 +0900)]
Honor run_as_owner option in tablesync worker.

Commit 482675987 introduced "run_as_owner" subscription option so that
subscription runs with either the permissions of the subscription
owner or the permission of the table owner. However, tablesync workers
did not use this option for the initial data copy.

With this change, tablesync workers run with appropriate permissions
based on "run_as_owner" option.

Ajin Cherian, with changes and regression tests added by me.

Reported-By: Amit Kapila
Author: Ajin Cherian, Masahiko Sawada
Reviewed-by: Ajin Cherian, Amit Kapila
Discussion: https://postgr.es/m/CAA4eK1L=qzRHPEn+qeMoKQGFBzqGoLBzt_ov0A89iFFiut+ppA@mail.gmail.com

23 months agoRefactor log check logic for connect_ok/fails in PostgreSQL::Test::Cluster
Michael Paquier [Fri, 9 Jun 2023 00:37:21 +0000 (09:37 +0900)]
Refactor log check logic for connect_ok/fails in PostgreSQL::Test::Cluster

This commit refactors a bit the code in charge of checking for log
patterns when connections fail or succeed, by moving the log pattern
checks into their own routine, for clarity.  This has come up as
something to improve while discussing the refactoring of find_in_log().

Back down to 14 where these routines are used, to ease the
introduction of new tests that could rely on them.

Author: Vignesh C, Michael Paquier
Discussion: https://postgr.es/m/CALDaNm0YSiLpjCmajwLfidQrFOrLNKPQir7s__PeVvh9U3uoTQ@mail.gmail.com
Back-through: 14

23 months agoFix oversight in outer join removal.
Tom Lane [Thu, 8 Jun 2023 21:10:04 +0000 (17:10 -0400)]
Fix oversight in outer join removal.

A placeholder that references the outer join's relid in ph_eval_at
is logically "above" the join, and therefore we can't remove its
PlaceHolderInfo: it might still be used somewhere in the query.

This was not an issue pre-v16 because we failed to remove the join
at all in such cases.  The new outer-join-aware-Var infrastructure
permits deducing that it's okay to remove the join, but then we
have to clean up correctly afterwards.

Report and fix by Richard Guo

Discussion: https://postgr.es/m/CAMbWs4_tuVn9EwwMcggGiZJWWstdXX_ci8FeEU17vs+4nLgw3w@mail.gmail.com

23 months agoRe-allow INDEX_VAR as rt_index in ChangeVarNodes().
Tom Lane [Thu, 8 Jun 2023 17:11:49 +0000 (13:11 -0400)]
Re-allow INDEX_VAR as rt_index in ChangeVarNodes().

Apparently some extensions are in the habit of calling
ChangeVarNodes() with INDEX_VAR as the rt_index to replace.
That worked before 2489d76c4, at least as long as there were
not PlaceHolderVars in the expression; but now it fails
because bms_is_member spits up.  Add a test to avoid that.

Per report from Anton Melnikov, though this is not his
proposed .

Discussion: https://postgr.es/m/5b370a46-f6d2-373d-9dbc-0d55250e82c1@inbox.ru

23 months agoFix small overestimation of base64 encoding output length.
Tom Lane [Thu, 8 Jun 2023 15:24:31 +0000 (11:24 -0400)]
Fix small overestimation of base64 encoding output length.

pg_base64_enc_len() and its clones overestimated the output
length by up to 2 bytes, as a result of sloppy thinking about
where to divide.  No callers require a precise estimate, so
this has no consequences worse than palloc'ing a byte or two
more than necessary.  We might as well get it right though.

This bug is very ancient, dating to commit 79d78bb26 which
added encode.c.  (The other instances were presumably copied
from there.)  Still, it doesn't quite seem worth back-ing.

Oleg Tselebrovskiy

Discussion: https://postgr.es/m/f94da55286a63022150bc266afdab754@postgrespro.ru

23 months agodoc: Fix example command for ALTER FOREIGN TABLE ... OPTIONS.
Fujii Masao [Thu, 8 Jun 2023 11:11:52 +0000 (20:11 +0900)]
doc: Fix example command for ALTER FOREIGN TABLE ... OPTIONS.

In the documentation, previously the example command for
ALTER FOREIGN TABLE ... OPTIONS incorrectly included both
the option name and value with the DROP operation.
The correct syntax for the DROP operation requires only
the name of the option to be specified. This commit fixes
the example by removing the option value from the DROP operation.

Back- to all supported versions.

Author: Mehmet Emin KARAKAS <[email protected]>
Reviewed-by: Fujii Masao
Discussion: https://postgr.es/m/CANQrdXAHzbcEYhjGoe5A42OmfvdQhHFJzyKj9gJvHuDKyOF5Ng@mail.gmail.com

23 months agoDon't use _BitScanForward64/_BitScanReverse64 on 32-bit MSVC builds
David Rowley [Wed, 7 Jun 2023 22:10:34 +0000 (10:10 +1200)]
Don't use _BitScanForward64/_BitScanReverse64 on 32-bit MSVC builds

677319746 added support for making use of MSVC's bit scanning functions.
However, that commit failed to consider 32-bit MSVC builds where the
64-bit versions of these functions are unavailable.  This resulted in
compilation failures on 32-bit MSVC.

Here we adjust the code so we fall back on the manual way of finding the
bit positions for 64-bit integers when building on 32-bit MSVC.

Bug: #17967
Reported-by: Youmiu Mo
Discussion: https://postgr.es/m/17967-cd21e34a314141b2@postgresql.org

23 months agoUse per-tuple context in ExecGetAllUpdatedCols
Tomas Vondra [Wed, 7 Jun 2023 14:48:50 +0000 (16:48 +0200)]
Use per-tuple context in ExecGetAllUpdatedCols

Commit fc22b6623b (generated columns) replaced ExecGetUpdatedCols() with
ExecGetAllUpdatedCols() in a couple places handling UPDATE (triggers and
lock mode). However, ExecGetUpdatedCols() did exec_rt_fetch() while
ExecGetAllUpdatedCols() also allocates memory through bms_union()
without paying attention to the memory context and happened to use the
long-lived ExecutorState, ing the memory until the end of the query.

The amount of  memory is proportional to the number of (updated)
attributes, types of UPDATE triggers, and the number of processed rows
(which for UPDATE ... FROM ... may be much higher than updated rows).

Fixed by switching to the per-tuple context in GetAllUpdatedColumns().
This is fine for all in-core callers, but external callers may need to
copy the result. But we're not aware of any such callers.

Note the issue was introduced by fc22b6623b, but the macros were later
renamed by f50e888990.

Back to 12, where the issue was introduced.

Reported-by: Tomas Vondra
Reviewed-by: Andres Freund, Tom Lane, Jakub Wartak
Back-through: 12
Discussion: https://postgr.es/m/222a3442-7f7d-246c-ed9b-a76209d19239@enterprisedb.com

23 months agodoc: Fix confusing positioning of notes in connection settings
Peter Eisentraut [Wed, 7 Jun 2023 15:54:53 +0000 (17:54 +0200)]
doc: Fix confusing positioning of notes in connection settings

Reported-by: Jonathan S. Katz <[email protected]>
Reviewed-by: Daniel Gustafsson <[email protected]>
Discussion: https://www.postgresql.org/message-id/flat/6f825d42-a1ce-492a-2ea7-c83e6e65fa8b%40postgresql.org

23 months agoRemove read-only server settings lc_collate and lc_ctype
Peter Eisentraut [Wed, 7 Jun 2023 14:57:06 +0000 (16:57 +0200)]
Remove read-only server settings lc_collate and lc_ctype

The GUC settings lc_collate and lc_ctype are from a time when those
locale settings were cluster-global.  When those locale settings were
made per-database (PG 8.4), the settings were kept as read-only.  As
of PG 15, you can use ICU as the per-database locale provider, so
examining these settings is already less meaningful and possibly
confusing, since you need to look into pg_database to find out what is
really happening, and they would likely become fully obsolete in the
future anyway.

Reviewed-by: Jeff Davis <[email protected]>
Discussion: https://www.postgresql.org/message-id/696054d1-bc88-b6ab-129a-18b8bce6a6f0@enterprisedb.com

23 months agoReload configuration more frequently in apply worker.
Amit Kapila [Wed, 7 Jun 2023 03:49:17 +0000 (09:19 +0530)]
Reload configuration more frequently in apply worker.

The apply worker was not reloading the configuration while processing
messages if there is a continuous flow of messages from upstream. It was
also not reloading the configuration if there is a change in the
configuration after it has waited for the message and before receiving the
new replication message. This can lead to failure in tests because we
expect that after reload, the behavior of apply worker to respect the
changed GUCs.

We found this while analyzing a rare buildfarm failure.

Author: Hou Zhijie
Reviewed-by: Amit Kapila
Discussion: https://postgr.es/m/OS0PR01MB5716AF9079CC0755CD015322947E9@OS0PR01MB5716.jpnprd01.prod.outlook.com

23 months agoInitialize 'recordXtime' to silence compiler warning.
Heikki Linnakangas [Tue, 6 Jun 2023 17:30:53 +0000 (20:30 +0300)]
Initialize 'recordXtime' to silence compiler warning.

In reality, recordXtime will always be set by the getRecordTimestamp
call, but the compiler doesn't necessarily see that.

Back- to all supported versions.

Author: Tristan Partin
Discussion: https://www.postgresql.org/message-id/CT5MN8E11U0M.1NYNCHXYUHY41@gonk

23 months agodoc: PG 16 relnotes, fix PREPARE/EXECUTE wording
Bruce Momjian [Mon, 5 Jun 2023 18:00:37 +0000 (14:00 -0400)]
doc:  PG 16 relnotes, fix PREPARE/EXECUTE wording

Reported-by: Erik Rijkers
Discussion: https://postgr.es/m/73f361d0-237e-3413-224b-86ab6b71a3dd@xs4all.nl

23 months agoRemove obsolete comment
Peter Eisentraut [Mon, 5 Jun 2023 13:33:08 +0000 (15:33 +0200)]
Remove obsolete comment

OIDs are no longer system columns, since 578b229718.

23 months agoDoc: unify use of timestamp with time zone vs timestamptz
David Rowley [Mon, 5 Jun 2023 05:34:27 +0000 (17:34 +1200)]
Doc: unify use of timestamp with time zone vs timestamptz

For pg_stat_all_tables, last_vacuum, last_autovacuum and co all used the
full "timestamp with time zone" type name.  For consistency, make the
newly added "last_seq_scan" also use the full type name instead of
"timestamptz".

Author: Noriyoshi Shinoda
Discussion: https://postgr.es/m/DM4PR84MB17348EA11FA90A9BE896AF89EE489%40DM4PR84MB1734.NAMPRD84.PROD.OUTLOOK.COM

23 months agoDoc: explain about dependency tracking for new-style SQL functions.
Tom Lane [Sun, 4 Jun 2023 17:27:34 +0000 (13:27 -0400)]
Doc: explain about dependency tracking for new-style SQL functions.

5.14 Dependency Tracking was not updated when we added new-style
SQL functions.  Improve that.

Noted by Sami Imseih.  Back- to v14 where
new-style SQL functions came in.

Discussion: https://postgr.es/m/2C1933AB-C2F8-499B-9D18-4AC1882256A0@amazon.com

23 months agoFix pg_dump's failure to honor dependencies of SQL functions.
Tom Lane [Sun, 4 Jun 2023 17:05:54 +0000 (13:05 -0400)]
Fix pg_dump's failure to honor dependencies of SQL functions.

A new-style SQL function can contain a parse-time dependency
on a unique index, much as views and matviews can (such cases
arise from GROUP BY and ON CONFLICT clauses, for example).
To dump and restore such a function successfully, pg_dump must
postpone the function until after the unique index is created,
which will happen in the post-data part of the dump.  Therefore
we have to remove the normal constraint that functions are
dumped in pre-data.  Add code similar to the existing logic
that handles this for matviews.  I added test cases for both
as well, since code coverage tests showed that we weren't
testing the matview logic.

Per report from Sami Imseih.  Back- to v14 where
new-style SQL functions came in.

Discussion: https://postgr.es/m/2C1933AB-C2F8-499B-9D18-4AC1882256A0@amazon.com

23 months agoFix misuse of pg_log_info() for details/hints.
Tom Lane [Sun, 4 Jun 2023 15:22:05 +0000 (11:22 -0400)]
Fix misuse of pg_log_info() for details/hints.

Two places in pg_dump_sort.c were using pg_log_info() to add
more details to a message printed with pg_log_warning().
This is bad, because at default verbosity level we would
print the warning line but not the details.  One should use
pg_log_warning_detail() or pg_log_warning_hint() instead.
Commit 9a374b77f got rid of most such abuses, but unaccountably
missed these.

Noted while studying a bug report from Sami Imseih.
Back- to v15 where 9a374b77f came in.  (Prior versions
don't have the missing-details misbehavior, for reasons
I didn't bother to track down.)

Discussion: https://postgr.es/m/2C1933AB-C2F8-499B-9D18-4AC1882256A0@amazon.com

23 months agodoc: Add note to prevent server spoofing with SCRAM
Michael Paquier [Sat, 3 Jun 2023 21:44:09 +0000 (17:44 -0400)]
doc: Add note to prevent server spoofing with SCRAM

The set of recommendations added in the documentation with this commit
helps in avoiding SCRAM exchanges with untrusted servers.

Author: Jacob Champion, Jonathan Katz
Reviewed-by: Stephen Frost, Daniel Gustafsson, Michael Paquier
Discussion: https://postgr.es/m/CAAWbhmg5Gh0JetNbQi7z0yOsdsN9YECv8GoY-QBGBBiip9+JOw@mail.gmail.com

23 months agodoc: PG 16 relnotes, add psql \df+ source code change
Bruce Momjian [Thu, 1 Jun 2023 23:59:46 +0000 (19:59 -0400)]
doc:  PG 16 relnotes, add psql \df+ source code change

Reported-by: [email protected]
Discussion: https://postgr.es/m/17957-e1db8b1c15af444a@postgresql.org

23 months agodoc: add missing "the" in LATERAL sentence.
Bruce Momjian [Thu, 1 Jun 2023 14:22:16 +0000 (10:22 -0400)]
doc:  add missing "the" in LATERAL sentence.

Back-through: 11

23 months agodoc: PG 16 relnotes, move memory item and reword OUTER item
Bruce Momjian [Wed, 31 May 2023 11:01:21 +0000 (07:01 -0400)]
doc:  PG 16 relnotes, move memory item and reword OUTER item

Reported-by: David Rowley
Discussion: https://postgr.es/m/CAApHDvqmqxcX2n9NwvsfnsN0be6DjmyLSjz3Jk2DaZO5OLW+pw@mail.gmail.com

23 months agodoc: PG 16 relnotes, add memory overhead reduction item
Bruce Momjian [Tue, 30 May 2023 23:32:15 +0000 (19:32 -0400)]
doc:  PG 16 relnotes, add memory overhead reduction item

Reported-by: David Rowley
Discussion: https://postgr.es/m/CAApHDvqnUoyrJxS4uqnKo87b3_cUjaDDte4NQag49YHu1oEOgA@mail.gmail.com