users/rhaas/postgres.git
2 years agoOptimize walsender wake up logic using condition variables
Andres Freund [Sun, 21 May 2023 16:44:55 +0000 (09:44 -0700)]
Optimize walsender wake up logic using condition variables

WalSndWakeup() currently loops through all the walsenders slots, with a
spinlock acquisition and release for every iteration, to wake up waiting
walsenders.

This commonly was not a problem before e101dfac3a53c. But, to allow logical
decoding on standbys, we need to wake up logical walsenders after every WAL
record is applied on the standby, rather just when flushing WAL or switching
timelines.  This causes a performance regression for workloads replaying a lot
of WAL records.

To solve this, we use condition variable (CV) to efficiently wake up
walsenders in WalSndWakeup().

Every walsender prepares to sleep on a shared memory CV. Note that it just
prepares to sleep on the CV (i.e., adds itself to the CV's waitlist), but does
not actually wait on the CV (IOW, it never calls ConditionVariableSleep()). It
still uses WaitEventSetWait() for waiting, because CV infrastructure doesn't
handle FeBe socket events currently. The processes (startup process,
walreceiver etc.)  wanting to wake up walsenders use
ConditionVariableBroadcast(), which in turn calls SetLatch(), helping
walsenders come out of WaitEventSetWait().

We use separate shared memory CVs for physical and logical walsenders for
selective wake ups, see WalSndWakeup() for more details.

This approach is simple and reasonably efficient. But not very elegant. But
for 16 it seems to be a better path than a larger redesign of the CV
mechanism.  A desirable future improvement would be to add support for CVs
into WaitEventSetWait().

This still leaves us with a small regression in very extreme workloads (due to
the spinlock acquisition in ConditionVariableBroadcast() when there are no
waiters) - but that seems acceptable.

Reported-by: Andres Freund <[email protected]>
Suggested-by: Andres Freund <[email protected]>
Author: Bharath Rupireddy <[email protected]>
Reviewed-by: "Drouvot, Bertrand" <[email protected]>
Reviewed-by: Zhijie Hou <[email protected]>
Discussion: https://www.postgresql.org/message-id/20230509190247.3rrplhdgem6su6cg%40awork3.anarazel.de

2 years agodoc: PG 16 relnotes, add commits
Bruce Momjian [Sun, 21 May 2023 15:55:50 +0000 (11:55 -0400)]
doc:  PG 16 relnotes,  add commits

Reported-by: Ian Lawrence Barwick
Discussion: https://postgr.es/m/CAB8KJ=hLvQDb53WdigV7OBEBh5tzQ7eA=pG0ZpccoRVBUNCXYA@mail.gmail.com

2 years agoDoc: fix some rendering problems in the PDF docs build.
Tom Lane [Sun, 21 May 2023 15:21:19 +0000 (11:21 -0400)]
Doc: fix some rendering problems in the PDF docs build.

Tweak column widths in a couple of tables to avoid "contents
... exceed the available area" warnings.  Remove usage of
some non-Latin-1 characters.

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

2 years agoExpand some more uses of "deleg" to "delegation" or "delegated".
Tom Lane [Sun, 21 May 2023 14:55:18 +0000 (10:55 -0400)]
Expand some more uses of "deleg" to "delegation" or "delegated".

Complete the task begun in 9c0a0e2ed: we don't want to use the
abbreviation "deleg" for GSS delegation in any user-visible places.
(For consistency, this also changes most internal uses too.)

Abhijit Menon-Sen and Tom Lane

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

2 years agoFix remaining references to gss_accept_deleg.
Nathan Bossart [Sun, 21 May 2023 03:18:51 +0000 (20:18 -0700)]
Fix remaining references to gss_accept_deleg.

These were missed in 9c0a0e2ed9.

Discussion: https://postgr.es/m/20230521031757.GA3835667%40nathanxps13

2 years agorename "gss_accept_deleg" to "gss_accept_delegation".
Bruce Momjian [Sun, 21 May 2023 01:32:54 +0000 (21:32 -0400)]
rename "gss_accept_deleg" to "gss_accept_delegation".

This is more consistent with existing GUC spelling.

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

2 years agodoc: PG 16 relnotes, misc updates
Bruce Momjian [Sun, 21 May 2023 01:03:13 +0000 (21:03 -0400)]
doc:  PG 16 relnotes, misc updates

*  document to_reg* accepting OIDs
*  document pg_log_standby_snapshot()
*  document pg_input_is_valid() and pg_input_error_info()
*  handle rename of function to pg_split_walfile_name()
*  fix character encoding problem for Przemyslaw Sztoch
*  remove partition section

Reported-by: jian he, Tom Lane, Bertrand Drouvot
2 years agoAdd 0245f8db3 to .git-blame-ignore-revs.
Tom Lane [Fri, 19 May 2023 21:28:04 +0000 (17:28 -0400)]
Add 0245f8db3 to .git-blame-ignore-revs.

2 years agoPre-beta mechanical code beautification.
Tom Lane [Fri, 19 May 2023 21:24:48 +0000 (17:24 -0400)]
Pre-beta mechanical code beautification.

Run pgindent, pgperltidy, and reformat-dat-files.

This set of diffs is a bit larger than typical.  We've updated to
pg_bsd_indent 2.1.2, which properly indents variable declarations that
have multi-line initialization expressions (the continuation lines are
now indented one tab stop).  We've also updated to perltidy version
20230309 and changed some of its settings, which reduces its desire to
add whitespace to lines to make assignments etc. line up.  Going
forward, that should make for fewer random-seeming changes to existing
code.

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

2 years agoMake agreed-on updates in perltidy options.
Tom Lane [Fri, 19 May 2023 20:43:57 +0000 (16:43 -0400)]
Make agreed-on updates in perltidy options.

Our standard version of perltidy is now 20230309.
Add a --valign-exclusion-list setting to reduce crosstalk
between nearby lines of Perl code.

Also, update instructions for running pgindent
(missed in b16259b3c).

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

2 years agoDo pre-release housekeeping on catalog data.
Tom Lane [Fri, 19 May 2023 20:36:38 +0000 (16:36 -0400)]
Do pre-release housekeeping on catalog data.

Run renumber_oids.pl to move high-numbered OIDs down, as per pre-beta
tasks specified by RELEASE_CHANGES.  For reference, the command was

./renumber_oids.pl --first-mapped-oid 8000 --target-oid 6200

2 years agoFix thinko in join removal.
Tom Lane [Fri, 19 May 2023 19:24:07 +0000 (15:24 -0400)]
Fix thinko in join removal.

In commit 9df8f903e I (tgl) switched join_is_removable() from
using the min relid sets of the join under consideration to
using its full syntactic relid sets.  This was a mistake,
as it allowed join removal in cases where a reference to the
join output would survive in some syntactically-lower join
condition.  Revert to the former coding.

Richard Guo

Discussion: https://postgr.es/m/CAMbWs4-EU9uBGSP7G-iTwLBhRQ=rnZKvFDhD+n+xhajokyPCKg@mail.gmail.com

2 years agoFix misbehavior of EvalPlanQual checks with multiple result relations.
Tom Lane [Fri, 19 May 2023 18:26:34 +0000 (14:26 -0400)]
Fix misbehavior of EvalPlanQual checks with multiple result relations.

The idea of EvalPlanQual is that we replace the query's scan of the
result relation with a single injected tuple, and see if we get a
tuple out, thereby implying that the injected tuple still passes the
query quals.  (In join cases, other relations in the query are still
scanned normally.)  This logic was not updated when commit 86dc90056
made it possible for a single DML query plan to have multiple result
relations, when the query target relation has inheritance or partition
children.  We replaced the output for the current result relation
successfully, but other result relations were still scanned normally;
thus, if any other result relation contained a tuple satisfying the
quals, we'd think the EPQ check passed, even if it did not pass for
the injected tuple itself.  This would lead to update or delete
actions getting performed when they should have been skipped due to
a conflicting concurrent update in READ COMMITTED isolation mode.

Fix by blocking all sibling result relations from emitting tuples
during an EvalPlanQual recheck.  In the back branches, the fix is
complicated a bit by the need to not change the size of struct
EPQState (else we'd have ABI-breaking changes in offsets in
struct ModifyTableState).  Like the back-patches of 3f7836ff6
and 4b3e37993, add a separately palloc'd struct to avoid that.
The logic is the same as in HEAD otherwise.

This is only a live bug back to v14 where 86dc90056 came in.
However, I chose to back-patch the test cases further, on the
grounds that this whole area is none too well tested.  I skipped
doing so in v11 though because none of the test applied cleanly,
and it didn't quite seem worth extra work for a branch with only
six months to live.

Per report from Ante Krešić (via Aleksander Alekseev)

Discussion: https://postgr.es/m/CAJ7c6TMBTN3rcz4=AjYhLPD_w3FFT0Wq_C15jxCDn8U4tZnH1g@mail.gmail.com

2 years agopsql: Tweak xheader_width and pager_min_lines input parsing
Alvaro Herrera [Fri, 19 May 2023 18:19:28 +0000 (20:19 +0200)]
psql: Tweak xheader_width and pager_min_lines input parsing

Don't throw away the previous value when an invalid value is proposed.

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

2 years agoMessage style improvements
Peter Eisentraut [Fri, 19 May 2023 16:45:29 +0000 (18:45 +0200)]
Message style improvements

2 years agodoc: PG 16 relnotes, delete reverted grant, adjust version num
Bruce Momjian [Fri, 19 May 2023 16:29:50 +0000 (12:29 -0400)]
doc:  PG 16 relnotes, delete reverted grant, adjust version num

Reported-by: Nathan Bossart, Sehrope Sarkuni
2 years agoAllocate hash join files in a separate memory context
Tomas Vondra [Fri, 19 May 2023 14:31:11 +0000 (16:31 +0200)]
Allocate hash join files in a separate memory context

Should a hash join exceed memory limit, the hashtable is split up into
multiple batches. The number of batches is doubled each time a given
batch is determined not to fit in memory. Each batch file is allocated
with a block-sized buffer for buffering tuples and parallel hash join
has additional sharedtuplestore accessor buffers.

In some pathological cases requiring a lot of batches, often with skewed
data, bad stats, or very large datasets, users can run out-of-memory
solely from the memory overhead of all the batch files' buffers.

Batch files were allocated in the ExecutorState memory context, making
it very hard to identify when this batch explosion was the source of an
OOM. This commit allocates the batch files in a dedicated memory
context, making it easier to identify the cause of an OOM and work to
avoid it.

Based on initial draft by Tomas Vondra, with significant reworks and
improvements by Jehan-Guillaume de Rorthais.

Author: Jehan-Guillaume de Rorthais <[email protected]>
Author: Tomas Vondra <[email protected]>
Reviewed-by: Melanie Plageman <[email protected]>
Discussion: https://postgr.es/m/20190421114618.z3mpgmimc3rmubi4@development
Discussion: https://postgr.es/m/20230504193006.1b5b9622%40karst#273020ff4061fc7a2fbb1ba96b281f17

2 years agoDescribe hash join implementation
Tomas Vondra [Fri, 19 May 2023 14:19:54 +0000 (16:19 +0200)]
Describe hash join implementation

Add a high level description of our implementation of the hybrid hash
join algorithm to the block comment in nodeHashjoin.c.

Author: Melanie Plageman <[email protected]>
Reviewed-by: Tomas Vondra <[email protected]>
Reviewed-by: Jehan-Guillaume de Rorthais <[email protected]>
Discussion: https://postgr.es/m/20230516160051.4267a800%40karst

2 years agoAvoid naming conflict between transactions.sql and namespace.sql.
Tom Lane [Fri, 19 May 2023 14:57:46 +0000 (10:57 -0400)]
Avoid naming conflict between transactions.sql and namespace.sql.

Commits 681d9e462 et al added a test case in namespace.sql that
implicitly relied on there not being a table "public.abc".
However, the concurrently-run transactions.sql test creates precisely
such a table, so with the right timing you'd get a failure.
Creating a table named as generically as "abc" in a common schema
seems like bad practice, so fix this by changing the name of
transactions.sql's table.  (Compare 2cf8c7aa4.)

Marina Polyakova

Discussion: https://postgr.es/m/80d0201636665d82185942e7112257b4@postgrespro.ru

2 years agoRemove stray mid-sentence tabs in comments
Peter Eisentraut [Fri, 19 May 2023 13:57:38 +0000 (15:57 +0200)]
Remove stray mid-sentence tabs in comments

2 years agodoc: PG 16 relnotes, merge REINDEX and reindexdb items
Bruce Momjian [Fri, 19 May 2023 13:30:00 +0000 (09:30 -0400)]
doc:  PG 16 relnotes, merge REINDEX and reindexdb items

Reported-by: Vibhor Kumar
2 years agodoc: PG 16 relnotes, add missing parentheses
Bruce Momjian [Fri, 19 May 2023 12:31:11 +0000 (08:31 -0400)]
doc:  PG 16 relnotes, add missing parentheses

Reported-by: Hans Buschmann
2 years agoMove mdwriteback() to better place
Peter Eisentraut [Fri, 19 May 2023 11:42:06 +0000 (13:42 +0200)]
Move mdwriteback() to better place

The previous order in the file didn't make sense and matched neither
the header file nor the smgr API.

Discussion: https://www.postgresql.org/message-id/flat/22fed8ba-01c3-2008-a256-4ea912d68fab%40enterprisedb.com

2 years agoReindent some comments
Peter Eisentraut [Fri, 19 May 2023 08:52:04 +0000 (10:52 +0200)]
Reindent some comments

Most (older) comments in md.c and smgr.c are indented with a leading
tab on all lines, which isn't the current style and makes updating the
comments a bit annoying.  This reindents all these lines with a single
space, as is the normal style.  This issue exists in various shapes
throughout the code but it's pretty consistent here, and since there
is a patch pending to refresh some of the comments in these files, it
seems sensible to clean this up here separately.

Discussion: https://www.postgresql.org/message-id/flat/22fed8ba-01c3-2008-a256-4ea912d68fab%40enterprisedb.com

2 years agopageinspect: Fix gist_page_items() with included columns
Michael Paquier [Fri, 19 May 2023 03:37:58 +0000 (12:37 +0900)]
pageinspect: Fix gist_page_items() with included columns

Non-leaf pages of GiST indexes contain key attributes, leaf pages
contain both key and non-key attributes, and gist_page_items() ignored
the handling of non-key attributes.  This caused a few problems when
using gist_page_items() on a GiST index with INCLUDE:
- On a non-leaf page, the function would crash.
- On a leaf page, the function would work, but miss to display all the
values for included attributes.

This commit fixes gist_page_items() to handle such cases in a more
appropriate way, and now displays the values of key and non-key
attributes for each item separately in a style consistent with what
ruleutils.c would generate for the attribute list, depending on the page
type dealt with.  In a way similar to how a record is displayed, values
would be double-quoted for key or non-key attributes if required.

ruleutils.c did not provide a routine able to control if non-key
attributes should be displayed, so an extended() routine for index
definitions is added to work around the leaf and non-leaf page
differences.

While on it, this commit fixes a third problem related to the amount of
data reported for key attributes.  The code originally relied on
BuildIndexValueDescription() (used for error reports on constraints)
that would not print all the data stored in the index but the index
opclass's input type, so this limited the amount of information
available.  This switch makes gist_page_items() much cheaper as there is
no need to run ACL checks for each item printed, which is not an issue
anyway as superuser rights are required to execute the functions of
pageinspect.  Opclasses whose data cannot be displayed can rely on
gist_page_items_bytea().

The documentation of this function was slightly incorrect for the
output results generated on HEAD and v15, so adjust it on these
branches.

Author: Alexander Lakhin, Michael Paquier
Discussion: https://postgr.es/m/17884-cb8c326522977acb@postgresql.org
Backpatch-through: 14

2 years agodoc: improve pg_walinspect and role membership items
Bruce Momjian [Fri, 19 May 2023 03:17:03 +0000 (23:17 -0400)]
doc:  improve pg_walinspect and role membership items

Reported-by: Peter Geoghegan
2 years agodoc: improve description of adding roles as members
Bruce Momjian [Fri, 19 May 2023 02:22:17 +0000 (22:22 -0400)]
doc:  improve description of adding roles as members

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

2 years agodoc: update PG 16 relnotes for pg_walinspect changes
Bruce Momjian [Fri, 19 May 2023 01:44:22 +0000 (21:44 -0400)]
doc:  update PG 16 relnotes for pg_walinspect changes

Reported-by: Peter Geoghegan
2 years agoShow empty BRIN ranges in brin_page_items
Tomas Vondra [Thu, 18 May 2023 23:53:30 +0000 (01:53 +0200)]
Show empty BRIN ranges in brin_page_items

Commit 3581cbdcd6 added a flag to identify empty BRIN ranges. This adds
the new flag to brin_page_items() output.

This is kept as a separate commit as it should not be backpatched.

Reviewed-by: Justin Pryzby, Matthias van de Meent, Alvaro Herrera
Discussion: https://postgr.es/m/402430e4-7d9d-6cf1-09ef-464d80afff3b@enterprisedb.com

2 years agoFix handling of empty ranges and NULLs in BRIN
Tomas Vondra [Thu, 18 May 2023 22:00:22 +0000 (00:00 +0200)]
Fix handling of empty ranges and NULLs in BRIN

BRIN indexes did not properly distinguish between summaries for empty
(no rows) and all-NULL ranges, treating them as essentially the same
thing. Summaries were initialized with allnulls=true, and opclasses
simply reset allnulls to false when processing the first non-NULL value.
This however produces incorrect results if the range starts with a NULL
value (or a sequence of NULL values), in which case we forget the range
contains NULL values when adding the first non-NULL value.

This happens because the allnulls flag is used for two separate
purposes - to mark empty ranges (not representing any rows yet) and
ranges containing only NULL values.

Opclasses don't know which of these cases it is, and so don't know
whether to set hasnulls=true. Setting the flag in both cases would make
it correct, but it would also make BRIN indexes useless for queries with
IS NULL clauses. All ranges start empty (and thus allnulls=true), so all
ranges would end up with either allnulls=true or hasnulls=true.

The severity of the issue is somewhat reduced by the fact that it only
happens when adding values to an existing summary with allnulls=true.
This can happen e.g. for small tables (because a summary for the first
range exists for all BRIN indexes), or for tables with large fraction of
NULL values in the indexed columns.

Bulk summarization (e.g. during CREATE INDEX or automatic summarization)
that processes all values at once is not affected by this issue. In this
case the flags were updated in a slightly different way, not forgetting
the NULL values.

To identify empty ranges we use a new flag, stored in an unused bit in
the BRIN tuple header so the on-disk format remains the same. A matching
flag is added to BrinMemTuple, into a 3B gap after bt_placeholder.
That means there's no risk of ABI breakage, although we don't actually
pass the BrinMemTuple to any public API.

We could also skip storing index tuples for empty summaries, but then
we'd have to always process such ranges - even if there are no rows in
large parts of the table (e.g. after a bulk DELETE), it would still
require reading the pages etc. So we store them, but ignore them when
building the bitmap.

Backpatch to 11. The issue exists since BRIN indexes were introduced in
9.5, but older releases are already EOL.

Backpatch-through: 11
Reviewed-by: Justin Pryzby, Matthias van de Meent, Alvaro Herrera
Discussion: https://postgr.es/m/402430e4-7d9d-6cf1-09ef-464d80afff3b@enterprisedb.com

2 years agodoc: PG 16 relnotes, add freeze and update walinspect items
Bruce Momjian [Thu, 18 May 2023 22:53:28 +0000 (18:53 -0400)]
doc:  PG 16 relnotes, add freeze and update walinspect items

Reported-by: Peter Geoghegan
2 years agodocs: re-order some PG 16 relnotes items
Bruce Momjian [Thu, 18 May 2023 22:25:21 +0000 (18:25 -0400)]
docs:  re-order some PG 16 relnotes items

Reported-by: Jonathan Katz
2 years agodoc: more PG 16 relnote wording improvements
Bruce Momjian [Thu, 18 May 2023 21:42:47 +0000 (17:42 -0400)]
doc:  more PG 16 relnote wording improvements

2 years agoFix handling of NULLs when merging BRIN summaries
Tomas Vondra [Thu, 18 May 2023 11:00:31 +0000 (13:00 +0200)]
Fix handling of NULLs when merging BRIN summaries

When merging BRIN summaries, union_tuples() did not correctly update the
target hasnulls/allnulls flags. When merging all-NULL summary into a
summary without any NULL values, the result had both flags set to false
(instead of having hasnulls=true).

This happened because the code only considered the hasnulls flags,
ignoring the possibility the source summary has allnulls=true.

Discovered while investigating issues with handling empty BRIN ranges
and handling of NULL values, but it's a separate problem (has nothing to
do with empty ranges).

Fixed by considering both flags on the source summary, and updating the
hasnulls flag on the target summary.

Backpatch to 11. The bug exists since 9.5 (where BRIN indexes were
introduced), but those releases are EOL already.

Discussion: https://postgr.es/m/9d993d0d-e431-2196-9ccc-0554d0e60154%40enterprisedb.com

2 years agodoc: add more sections to PG 16 release notes
Bruce Momjian [Thu, 18 May 2023 20:33:05 +0000 (16:33 -0400)]
doc:  add more sections to PG 16 release notes

2 years agodoc: first draft of the PG 16 release notes
Bruce Momjian [Thu, 18 May 2023 20:00:04 +0000 (16:00 -0400)]
doc:  first draft of the PG 16 release notes

2 years agoFix documentation build broken by 1e16af8ab5.
Jeff Davis [Thu, 18 May 2023 18:04:30 +0000 (11:04 -0700)]
Fix documentation build broken by 1e16af8ab5.

2 years agoDoc improvements for language tags and custom ICU collations.
Jeff Davis [Thu, 18 May 2023 17:37:55 +0000 (10:37 -0700)]
Doc improvements for language tags and custom ICU collations.

Separate the documentation for language tags themselves from the
available collation settings which can be included in a language tag.

Include tables of the available options, more details about the
effects of each option, and additional examples.

Also include an explanation of the "levels" of textual features and
how they relate to collation.

Discussion: https://postgr.es/m/25787ec7-4c04-9a8a-d241-4dc9be0b1ba3@postgresql.org
Reviewed-by: Jonathan S. Katz
2 years agoTweak API of new function clause_is_computable_at().
Tom Lane [Thu, 18 May 2023 14:39:16 +0000 (10:39 -0400)]
Tweak API of new function clause_is_computable_at().

Pass it the RestrictInfo under consideration, not just the
clause_relids.  This should save some trivial amount of
code at the call sites, and it gives us more flexibility
about what clause_is_computable_at() does.  There's no
actual functional change here, though.

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

2 years agoICU: check for U_STRING_NOT_TERMINATED_WARNING.
Jeff Davis [Wed, 17 May 2023 20:43:41 +0000 (13:43 -0700)]
ICU: check for U_STRING_NOT_TERMINATED_WARNING.

Fixes memory error in cases where the length of the language name
returned by uloc_getLanguage() is exactly ULOC_LANG_CAPACITY, in which
case the status is set to U_STRING_NOT_TERMINATED_WARNING.

Also check in call sites for other ICU functions that are expected to
return a C string to be safe (no bug is known at these other call
sites).

Reported-by: Alexander Lakhin
Discussion: https://postgr.es/m/2098874d-c111-41e4-9063-30bcf135226b@gmail.com

2 years agoReduce icu_validation_level default to WARNING.
Jeff Davis [Wed, 17 May 2023 20:18:40 +0000 (13:18 -0700)]
Reduce icu_validation_level default to WARNING.

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

2 years agoFix error message wordings
Peter Eisentraut [Wed, 17 May 2023 19:33:13 +0000 (21:33 +0200)]
Fix error message wordings

The original patch for percentrepl.c c96de2ce17 adopted the error
messages from basebackup_to_shell, but that uses terminology that
doesn't really fit with the new API naming.

2 years agoAdd writeback to pg_stat_io
Andres Freund [Wed, 17 May 2023 18:18:35 +0000 (11:18 -0700)]
Add writeback to pg_stat_io

28e626bde00 added the concept of IOOps but neglected to include writeback
operations. ac8d53dae5 added time spent doing these I/O operations. Without
counting writeback, checkpointer write time in the log often differed
substantially from that in pg_stat_io. To fix this, add IOOp IOOP_WRITEBACK
and track writeback in pg_stat_io.

Bumps catversion.

Author: Melanie Plageman <[email protected]>
Reviewed-by: Kyotaro Horiguchi <[email protected]>
Reported-by: Andres Freund <[email protected]>
Discussion: https://postgr.es/m/20230419172326.dhgyo4wrrhulovt6%40awork3.anarazel.de

2 years agoUpdate parameter name context to wb_context
Andres Freund [Wed, 17 May 2023 18:17:12 +0000 (11:17 -0700)]
Update parameter name context to wb_context

For clarity of review, renaming the function parameter "context" in
ScheduleBufferTagForWriteback() and IssuePendingWritebacks() to
"wb_context" is a separate commit. The next commit adds an "io_context"
parameter and "wb_context" makes it more clear which is which.

Author: Melanie Plageman <[email protected]>
Discussion: https://postgr.es/m/CAAKRu_acc6iL4M3hvOTeztf_ZPpsB3Pqio5aVHgZ5q=Pi3BZKg@mail.gmail.com

2 years agoUse BUFFER_USAGE_LIMIT to reduce needed test table size
Andres Freund [Wed, 17 May 2023 18:17:02 +0000 (11:17 -0700)]
Use BUFFER_USAGE_LIMIT to reduce needed test table size

Using the minimum BUFFER_USAGE_LIMIT value, we can make one of the pg_stat_io
test tables smaller while still causing reuses.

Author: Melanie Plageman <[email protected]>
Discussion: https://postgr.es/m/CAAKRu_acc6iL4M3hvOTeztf_ZPpsB3Pqio5aVHgZ5q=Pi3BZKg@mail.gmail.com

2 years agoRevert "Add USER SET parameter values for pg_db_role_setting"
Alexander Korotkov [Wed, 17 May 2023 17:06:50 +0000 (20:06 +0300)]
Revert "Add USER SET parameter values for pg_db_role_setting"

This reverts commit 096dd80f3ccc and its fixups beecbe8e5001afdd9f7f0e00,
529da086badb93e739ac61.

Catversion is bumped.

Discussion: https://postgr.es/m/d46f9265-ff3c-6743-2278-6772598233c2%40pgmasters.net

2 years agopg_dump: Error message improvements
Alvaro Herrera [Wed, 17 May 2023 17:13:08 +0000 (19:13 +0200)]
pg_dump: Error message improvements

Remove spurious semicolon from one error message, and print the
offending value of a parameter reported as invalid in another.

2 years agopg_dump: Have _EndLO report errno after CFH->write_func() failure
Alvaro Herrera [Wed, 17 May 2023 16:55:51 +0000 (18:55 +0200)]
pg_dump: Have _EndLO report errno after CFH->write_func() failure

Other callers of that function do things this way, but this one didn't
get the memo.

2 years agoTrack tlist_vinfo.varnullingrels even in non-Assert builds.
Tom Lane [Wed, 17 May 2023 15:46:15 +0000 (11:46 -0400)]
Track tlist_vinfo.varnullingrels even in non-Assert builds.

Oversight in commit 867be9c07 (which should get reverted
along with that, if we ever do revert it).  Per buildfarm.

2 years agoFix some issues with improper placement of outer join clauses.
Tom Lane [Wed, 17 May 2023 15:13:52 +0000 (11:13 -0400)]
Fix some issues with improper placement of outer join clauses.

After applying outer-join identity 3 in the forward direction,
it was possible for the planner to mistakenly apply a qual clause
from above the two outer joins at the now-lower join level.
This can give the wrong answer, since a value that would get nulled
by the now-upper join might not yet be null.

To fix, when we perform such a transformation, consider that the
now-lower join hasn't really completed the outer join it's nominally
responsible for and thus its relid set should not include that OJ's
relid (nor should its output Vars have that nullingrel bit set).
Instead we add those bits when the now-upper join is performed.
The existing rules for qual placement then suffice to prevent
higher qual clauses from dropping below the now-upper join.
There are a few complications from needing to consider transitive
closures in case multiple pushdowns have happened, but all in all
it's not a very complex patch.

This is all new logic (from 2489d76c4) so no need to back-patch.
The added test cases all have the same results as in v15.

Tom Lane and Richard Guo

Discussion: https://postgr.es/m/0b819232-4b50-f245-1c7d-c8c61bf41827@postgrespro.ru

2 years agoConvert nullingrels match checks from Asserts to test-and-elog.
Tom Lane [Wed, 17 May 2023 14:50:35 +0000 (10:50 -0400)]
Convert nullingrels match checks from Asserts to test-and-elog.

It seems like the code that these checks are backstopping may have
a few bugs left in it.  Use a test-and-elog so that the tests are
performed even in non-assert builds, and so that we get something
more informative than "server closed the connection" on failure.

Committed separately with the idea that eventually we'll revert
this.  It might be awhile though.

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

2 years agoAdvance input pointer when LZ4 compressing data
Tomas Vondra [Wed, 17 May 2023 14:49:31 +0000 (16:49 +0200)]
Advance input pointer when LZ4 compressing data

LZ4File_write() did not advance the input pointer on subsequent invocations of
LZ4F_compressUpdate(). As a result the generated compressed output would be a
compressed version of the same input chunk.

Tests failed to catch this error because the data would comfortably fit
within the default buffer size, as a single chunk. Tests have been added
to provide adequate coverage of multi-chunk compression.

WriteDataToArchiveLZ4() which is also using LZ4F_compressUpdate() did
not suffer from this omission.

Author: Georgios Kokolatos <[email protected]>
Reported-by: Michael Paquier <[email protected]>
Discussion: https://postgr.es/m/ZFhCyn4Gm2eu60rB%40paquier.xyz

2 years agoNull-terminate the output buffer of LZ4Stream_gets
Tomas Vondra [Wed, 17 May 2023 14:35:17 +0000 (16:35 +0200)]
Null-terminate the output buffer of LZ4Stream_gets

LZ4Stream_gets did not null-terminate its output buffer. The callers expected
the buffer to be null-terminated and passed it around to functions such as
sscanf with unintended consequences.

Author: Georgios Kokolatos <[email protected]>
Reported-by: Alexander Lakhin <[email protected]>
Discussion: https://postgr.es/m/94ae9bca-5ebb-1e68-bb7b-4f32e89fefbe@gmail.com

2 years agoAdd back SQLValueFunction for SQL keywords
Michael Paquier [Wed, 17 May 2023 01:19:17 +0000 (10:19 +0900)]
Add back SQLValueFunction for SQL keywords

This is equivalent to a revert of f193883 and fb32748, with the addition
that the declaration of the SQLValueFunction node needs to gain a couple
of node_attr for query jumbling.  The performance impact of removing the
function call inlining is proving to be too huge for some workloads
where these are used.  A worst-case test case of involving only simple
SELECT queries with a SQL keyword is proving to lead to a reduction of
10% in TPS via pgbench and prepared queries on a high-end machine.

None of the tests I ran back for this set of changes saw such a huge
gap, but Alexander Lakhin and Andres Freund have found that this can be
noticeable.  Keeping the older performance would mean to do more
inlining in the executor when using COERCE_SQL_SYNTAX for a function
expression, similarly to what SQLValueFunction does.  This requires more
redesign work and there is little time until 16beta1 is released, so for
now reverting the change is the best way forward, bringing back the
previous performance.

Bump catalog version.

Reported-by: Alexander Lakhin
Discussion: https://postgr.es/m/b32bed1b-0746-9b20-1472-4bdc9ca66d52@gmail.com

2 years agoEnsure Soundex difference() function handles empty input sanely.
Tom Lane [Tue, 16 May 2023 14:53:42 +0000 (10:53 -0400)]
Ensure Soundex difference() function handles empty input sanely.

fuzzystrmatch's difference() function assumes that _soundex()
always initializes its output buffer fully.  This was not so for
the case of a string containing no alphabetic characters, resulting
in unstable output and Valgrind complaints.

Fix by using memset() to fill the whole buffer in the early-exit
case.  Also make some cosmetic improvements (I didn't care for the
random switches between "instr[0]" and "*instr" notation).

Report and diagnosis by Alexander Lakhin (bug #17935).
Back-patch to all supported branches.

Discussion: https://postgr.es/m/17935-b99316aa79c18513@postgresql.org

2 years agolibpq: Error message improvement
Alvaro Herrera [Tue, 16 May 2023 09:50:08 +0000 (11:50 +0200)]
libpq: Error message improvement

Move a variable name out of the translatable message, to make it
identical to others.

2 years agoMark internal messages as no longer translatable
Alvaro Herrera [Tue, 16 May 2023 09:47:25 +0000 (11:47 +0200)]
Mark internal messages as no longer translatable

The problem that these messages protect against can only occur because
a corrupted hash spill file was written, i.e., a Postgres bug.  There's
no reason to have them as translatable.

Backpatch to 15, where these messages were changed by commit c4649cce39a4.

Reviewed-by: Daniel Gustafsson <[email protected]>
Discussion: https://postgr.es/m/20230510175407[email protected]

2 years agoFix reported runtime for single tests in pg_regress
Daniel Gustafsson [Tue, 16 May 2023 08:49:48 +0000 (10:49 +0200)]
Fix reported runtime for single tests in pg_regress

Commit 558fff0adf got the order of the parameters to test_status_failed
mixed up which resulted in the runtime being reported as 0 ms.  Fix by
changing the order to the correct one.  No backpatching is needed since
this has not been shipped in a release yet.

Discussion: https://postgr.es/m/0134C9EC-5F6B-4EAC-B2D5-BB4249BEBD4D@yesql.se

2 years agodoc: Fix ordering of entries in wait event table for I/O type
Michael Paquier [Tue, 16 May 2023 07:51:44 +0000 (16:51 +0900)]
doc: Fix ordering of entries in wait event table for I/O type

Issue spotted while reviewing a different patch touching this area.

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

2 years agolibpq: Error message improvement
Peter Eisentraut [Tue, 16 May 2023 06:59:34 +0000 (08:59 +0200)]
libpq: Error message improvement

2 years agopsql: Adjust capitalization of table heading
Peter Eisentraut [Tue, 16 May 2023 04:13:59 +0000 (06:13 +0200)]
psql: Adjust capitalization of table heading

for consistency with surrounding headings

2 years agodoc: Fix incorrect version list for Windows SDK
Michael Paquier [Mon, 15 May 2023 07:02:07 +0000 (16:02 +0900)]
doc: Fix incorrect version list for Windows SDK

References to SDK 8.1a should have been cleaned up in 495ed0e, as only
version 10 and above are supported with Windows 10 and newer versions.

Reported-by: Thomas Munro
Discussion: https://postgr.es/m/CA+hUKG++qE9uVjQaTTD7oaC8a2T3h8K50=Eqyx9uUZvOHa__ww@mail.gmail.com

2 years agoFix incorrect TAP test ordering
Peter Eisentraut [Mon, 15 May 2023 05:07:09 +0000 (07:07 +0200)]
Fix incorrect TAP test ordering

Using a test function before a possible skip_all is incorrect.  If the
skip_all is called, the test output will become incorrect and the test
file will fail.

a4f23f9b3c introduced a new test before skip_all.  After discussion,
this doesn't really need to be a test.  Instead, we just bail out if
the condition is not satisfied.

Discussion: https://www.postgresql.org/message-id/af5567a1-aea6-fbdb-7e4b-d1e23a43c43b@enterprisedb.com

2 years agoFix whitespace inconsistencies
Peter Eisentraut [Mon, 15 May 2023 04:27:40 +0000 (06:27 +0200)]
Fix whitespace inconsistencies

2 years agoFix wal_writer_flush_after initializer value.
Thomas Munro [Sun, 14 May 2023 22:45:19 +0000 (10:45 +1200)]
Fix wal_writer_flush_after initializer value.

Commit a73952b7956 (new in 16) required default values in guc_table.c
and C variable initializers to match.  This one only matched when
XLOG_BLCKSZ == 8kB.  Fix by using the same expression in both places
with a new DEFAULT_XXX macro, as done for other GUCs.

Reviewed-by: Andres Freund <[email protected]>
Discussion: https://postgr.es/m/CA+hUKGLNmLV=VrT==5MqnbARgx2ifRSFtdd8ofdfrdSLL3yv5A@mail.gmail.com

2 years agoRename io_direct to debug_io_direct.
Thomas Munro [Sun, 14 May 2023 22:31:14 +0000 (10:31 +1200)]
Rename io_direct to debug_io_direct.

Give the new GUC introduced by d4e71df6 a name that is clearly not
intended for mainstream use quite yet.

Future proposals would drop the prefix only after adding infrastructure
to make it efficient.  Having the switch in the tree sooner is good
because it might lead to new discoveries about the hazards awaiting us
on a wide range of systems, but that name was too enticing and could
lead to cross-version confusion in future, per complaints from Noah and
Justin.

Suggested-by: Noah Misch <[email protected]>
Reviewed-by: Noah Misch <[email protected]>
Reviewed-by: Justin Pryzby <[email protected]> (the idea, not the patch)
Reviewed-by: Tom Lane <[email protected]> (ditto)
Discussion: https://postgr.es/m/20230430041106.GA2268796%40rfd.leadboat.com

2 years agoImprove error message for pg_create_subscription.
Nathan Bossart [Fri, 12 May 2023 20:50:46 +0000 (13:50 -0700)]
Improve error message for pg_create_subscription.

c3afe8cf5a updated this error message, but it didn't use the new
style established in de4d456b40.

Reviewed-by: Tom Lane
Discussion: https://postgr.es/m/20230512203721.GA2644063%40nathanxps13.home

2 years agoTighten usage of PSQL_WATCH_PAGER.
Tom Lane [Fri, 12 May 2023 20:11:14 +0000 (16:11 -0400)]
Tighten usage of PSQL_WATCH_PAGER.

Don't use PSQL_WATCH_PAGER when stdin/stdout are not a terminal.
This corresponds to the restrictions on when other commands will
use [PSQL_]PAGER.  There isn't a lot of sense in trying to use a
pager in non-interactive cases, and doing so allows an environment
setting to break our tests.

Also, ignore PSQL_WATCH_PAGER if it is set but empty or all-blank,
for the same reasons we ignore such settings of [PSQL_]PAGER (see
commit 18f8f784c).

No documentation change is really needed, since there is nothing
suggesting that these constraints on [PSQL_]PAGER didn't already
apply to PSQL_WATCH_PAGER too.  But I rearranged the text
a little to make it read more naturally (IMHO anyway).

Per report from Pavel Stehule.  Back-patch to v15 where
PSQL_WATCH_PAGER was introduced.

Discussion: https://postgr.es/m/CAFj8pRDTwFzmEWdA-gdAcUh0ZnxUioSfTMre71WyB_wNJy-8gw@mail.gmail.com

2 years agoinitdb: Set collversion for standard collation UNICODE
Peter Eisentraut [Fri, 12 May 2023 07:45:50 +0000 (09:45 +0200)]
initdb: Set collversion for standard collation UNICODE

Since the behavior of the UNICODE collation can change with new
ICU/Unicode versions, we need to apply the versioning mechanism to it.
We do this with an UPDATE command in initdb; this is similar to how we
put the collation version into pg_database already.

Reported-by: Daniel Verite <[email protected]>
Discussion: https://www.postgresql.org/message-id/49417853-7bdd-4b23-a4e9-04c7aff33821@manitou-mail.org

2 years agoUndo faulty attempt at not relying on RINFO_IS_PUSHED_DOWN.
Tom Lane [Thu, 11 May 2023 17:44:25 +0000 (13:44 -0400)]
Undo faulty attempt at not relying on RINFO_IS_PUSHED_DOWN.

I've had a bee in my bonnet for some time about getting rid of
RestrictInfo.is_pushed_down, because it's squishily defined and
requires not-inexpensive extra tests to use (cf RINFO_IS_PUSHED_DOWN).
In commit 2489d76c4, I tried to make remove_rel_from_query() not
depend on that macro; but the replacement test is buggy,
as exposed by a report from Rushabh Lathia and Robert Haas.
That change was pretty incidental to the main goal of 2489d76c4,
so let's just revert it for now.  (Getting rid of is_pushed_down
is still far away, anyway.)

Discussion: https://postgr.es/m/CA+TgmoYco=hmg+iX1CW9Y1_CzNoSL81J03wUG-d2_3=rue+L2A@mail.gmail.com

2 years agoDoc: Fix link to fillfactor reloption.
Peter Geoghegan [Wed, 10 May 2023 17:49:50 +0000 (10:49 -0700)]
Doc: Fix link to fillfactor reloption.

Fix a link from the "Heap-Only Tuples" documentation section.
Previously, its "fillfactor" link pointed to the "CREATE TABLE"
command's documentation.  Now the link directly points to the fillfactor
storage parameter documentation (which is about half way into the
"CREATE TABLE" sect1).

Oversight in commit 115464bb.

Backpatch: 12-, the first version with a usable reloption link.

2 years agoFix publication syntax error message
Alvaro Herrera [Wed, 10 May 2023 16:26:10 +0000 (18:26 +0200)]
Fix publication syntax error message

There was some odd wording in corner-case gram.y error messages "some
error ... at or near", which appears to have been modeled after "syntax
error" messages.  However, they don't work that way, and they're just
wrong.  They're also uncovered by tests.  Remove the trailing words,
and also add tests.

They were introduced with 5a2832465fd8; backpatch to 15.

Author: Álvaro Herrera <[email protected]>

2 years agoAdd missing gettext triggers
Peter Eisentraut [Wed, 10 May 2023 11:51:51 +0000 (13:51 +0200)]
Add missing gettext triggers

due to the changes in commit dac048f71e

2 years agoFix assertion failure when updating stats_fetch_consistency in a transaction
Michael Paquier [Wed, 10 May 2023 02:24:30 +0000 (11:24 +0900)]
Fix assertion failure when updating stats_fetch_consistency in a transaction

An update of the GUC stats_fetch_consistency in a transaction would be
able to trigger an assertion when doing cache->snapshot.  In this case,
when retrieving a pgstat entry after the switch, a new snapshot would be
rebuilt, confusing pgstat_build_snapshot() because a snapshot is already
cached with an unexpected mode ("cache").

In order to fix this problem, this commit adds a flag to force a
snapshot clear each time this GUC is changed.  Some tests are added to
check, while on it.

Some optimizations in avoiding the snapshot clear should be possible
depending on what is cached and the current GUC value, I guess, but this
solution is simple, and ensures that the state of the cache is updated
each time a new pgstat entry is fetched, hence being consistent with the
level wanted by the client that has set the GUC.

Note that cache->none and snapshot->none would not cause issues, as
fetching a pgstat entry would be retrieved from shared memory on the
second attempt, however a snapshot would still be cached.  Similarly,
none->snapshot and none->cache would build a new snapshot on the second
fetch attempt.  Finally, snapshot->cache would cache a new snapshot on
the second attempt.

Reported-by: Alexander Lakhin
Author: Kyotaro Horiguchi
Discussion: https://postgr.es/m/17804-2a118cd046f2d0e5@postgresql.org
backpatch-through: 15

2 years agoDocument values of stats_fetch_consistency in postgresql.conf.sample
Michael Paquier [Wed, 10 May 2023 01:19:57 +0000 (10:19 +0900)]
Document values of stats_fetch_consistency in postgresql.conf.sample

Issue noted while looking at a patch related to that.

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

2 years agoFix the race condition in the test case added by commit a6e04b1d20.
Amit Kapila [Tue, 9 May 2023 08:55:33 +0000 (14:25 +0530)]
Fix the race condition in the test case added by commit a6e04b1d20.

The commit a6e04b1d20 added a test to ensure that the invalidated logical
slots don't retain WAL. The test was ensuring that the checkpoint removes
the WAL files corresponding to invalidated logical slots on the standby
node but missed the point that the standby node also had a physical slot
which led to the prevention of WAL file removal. Move the creation of
physical slot on the standby and initialization of cascading standby closer
to the test case that actually required it so that other tests don't get
affected by the presence of the physical slot on standby.

Author: Bertrand Drouvot
Reviewed-by: Amit Kapila
Discussion: https://postgr.es/m/2fefa454-5a70-2174-ddbf-4a0e41537139@gmail.com

2 years agoFix invalid memory access during the shutdown of the parallel apply worker.
Amit Kapila [Tue, 9 May 2023 03:58:06 +0000 (09:28 +0530)]
Fix invalid memory access during the shutdown of the parallel apply worker.

The callback function pa_shutdown() accesses MyLogicalRepWorker which may
not be initialized if there is an error during the initialization of the
parallel apply worker. The other problem is that by the time it is invoked
even after the initialization of the worker, the MyLogicalRepWorker will
be reset by another callback logicalrep_worker_onexit. So, it won't have
the required information.

To fix this, register the shutdown callback after we are attached to the
worker slot.

After this fix, we observed another issue which is that sometimes the
leader apply worker tries to receive the message from the error queue that
might already be detached by the parallel apply worker leading to an
error. To prevent such an error, we ensure that the leader apply worker
detaches from the parallel apply worker's error queue before stopping it.

Reported-by: Sawada Masahiko
Author: Hou Zhijie
Reviewed-by: Sawada Masahiko, Amit Kapila
Discussion: https://postgr.es/m/CAD21AoDo+yUwNq6nTrvE2h9bB2vZfcag=jxWc7QxuWCmkDAqcA@mail.gmail.com

2 years agoRevert "ICU: do not convert locale 'C' to 'en-US-u-va-posix'."
Jeff Davis [Tue, 9 May 2023 03:50:51 +0000 (20:50 -0700)]
Revert "ICU: do not convert locale 'C' to 'en-US-u-va-posix'."

This reverts commit f7faa9976cc0504c027a20ed66ceca9018041dd4.

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

2 years agoDoc: update VACUUM FREEZE query conflict guidance.
Peter Geoghegan [Mon, 8 May 2023 20:17:31 +0000 (13:17 -0700)]
Doc: update VACUUM FREEZE query conflict guidance.

Commit 1de58df4, which added page-level freezing, taught VACUUM to reuse
each page's "set-visibility-map" snapshotConflictHorizon for freezing
(at least in the vast majority of cases where freezing went ahead).
This made VACUUM FREEZE much less prone to generating recovery conflicts
on standbys; VACUUM FREEZE became only slightly more likely to cause
recovery conflicts than an equivalent VACUUM.

Update old documentation that specifically warned of the likelihood of
recovery conflicts from VACUUM FREEZE.  Explain the same general issue
(the issue of VACUUM generating recovery conflicts even in the absence
of dead row cleanup) using the example of conflicts caused by VISIBLE
WAL records.

2 years agoICU: do not convert locale 'C' to 'en-US-u-va-posix'.
Jeff Davis [Mon, 8 May 2023 17:34:51 +0000 (10:34 -0700)]
ICU: do not convert locale 'C' to 'en-US-u-va-posix'.

The conversion was intended to be for convenience, but it's more
likely to be confusing than useful.

The user can still directly specify 'en-US-u-va-posix' if desired.

Discussion: https://postgr.es/m/f83f089ee1e9acd5dbbbf3353294d24e1f196e95[email protected]
Discussion: https://postgr.es/m/37520ec1ae9591f83132f82dbd625f3fc2d69c16[email protected]

2 years agoAdjust sepgsql expected output for 681d9e462 et al.
Tom Lane [Mon, 8 May 2023 15:24:47 +0000 (11:24 -0400)]
Adjust sepgsql expected output for 681d9e462 et al.

Security: CVE-2023-2454

2 years agoHandle RLS dependencies in inlined set-returning functions properly.
Tom Lane [Mon, 8 May 2023 14:12:44 +0000 (10:12 -0400)]
Handle RLS dependencies in inlined set-returning functions properly.

If an SRF in the FROM clause references a table having row-level
security policies, and we inline that SRF into the calling query,
we neglected to mark the plan as potentially dependent on which
role is executing it.  This could lead to later executions in the
same session returning or hiding rows that should have been hidden
or returned instead.

Our thanks to Wolfgang Walther for reporting this problem.

Stephen Frost and Tom Lane

Security: CVE-2023-2455

2 years agoReplace last PushOverrideSearchPath() call with set_config_option().
Noah Misch [Mon, 8 May 2023 13:14:07 +0000 (06:14 -0700)]
Replace last PushOverrideSearchPath() call with set_config_option().

The two methods don't cooperate, so set_config_option("search_path",
...) has been ineffective under non-empty overrideStack.  This defect
enabled an attacker having database-level CREATE privilege to execute
arbitrary code as the bootstrap superuser.  While that particular attack
requires v13+ for the trusted extension attribute, other attacks are
feasible in all supported versions.

Standardize on the combination of NewGUCNestLevel() and
set_config_option("search_path", ...).  It is newer than
PushOverrideSearchPath(), more-prevalent, and has no known
disadvantages.  The "override" mechanism remains for now, for
compatibility with out-of-tree code.  Users should update such code,
which likely suffers from the same sort of vulnerability closed here.
Back-patch to v11 (all supported versions).

Alexander Lakhin.  Reported by Alexander Lakhin.

Security: CVE-2023-2454

2 years agoAdd missing source file to nls.mk
Peter Eisentraut [Mon, 8 May 2023 06:24:42 +0000 (08:24 +0200)]
Add missing source file to nls.mk

2 years agopg_dump: Restore lost translation marker
Peter Eisentraut [Mon, 8 May 2023 05:43:54 +0000 (07:43 +0200)]
pg_dump: Restore lost translation marker

The refactoring in 03d02f54a6 lost a translation marker.

2 years agodoc: Fix some markups in logical replication section
Michael Paquier [Mon, 8 May 2023 04:47:36 +0000 (13:47 +0900)]
doc: Fix some markups in logical replication section

Author: Peter Smith
Reviewed-by: David Zhang
Discussion: https://postgr.es/m/CAHut+Pst11ac2hcmePt1=oTmBwTT=DAssRR1nsdoy4BT+68=Mg@mail.gmail.com

2 years agopg_basebackup: Restore lost translation markers
Peter Eisentraut [Mon, 8 May 2023 04:15:26 +0000 (06:15 +0200)]
pg_basebackup: Restore lost translation markers

The refactoring in ebfb814f7c lost some translation markers.

2 years agoAdd ruleutils support for decompiling MERGE commands.
Tom Lane [Sun, 7 May 2023 15:01:15 +0000 (11:01 -0400)]
Add ruleutils support for decompiling MERGE commands.

This was overlooked when MERGE was added, but it's essential
support for MERGE in new-style SQL functions.

Alvaro Herrera

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

2 years agoFix typo with wait event for SLRU buffer of commit timestamps
Michael Paquier [Fri, 5 May 2023 12:25:44 +0000 (21:25 +0900)]
Fix typo with wait event for SLRU buffer of commit timestamps

This wait event was documented as "CommitTsBuffer" since its
introduction, but the code named it "CommitTSBuffer".  This commit fixes
the code to follow the term documented, which is also more consistent
with the naming of the other wait events used for commit timestamps.

Introduced by 5da1493.

Author: Alexander Lakhin
Discussion: https://postgr.es/m/e8c38840-596a-83d6-bd8d-cebc51111572@gmail.com
Backpatch-through: 13

2 years agoFix sepgsql expected test output
Alvaro Herrera [Fri, 5 May 2023 09:10:25 +0000 (11:10 +0200)]
Fix sepgsql expected test output

Commit f75cec4fff87 changed the order in which the relations are
permission-checked in RI_Initial_Check, which the sepgsql test is
sensitive to.  Adapt.

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

2 years agoFix copy-and-pasto in error message
Peter Eisentraut [Fri, 5 May 2023 05:50:08 +0000 (07:50 +0200)]
Fix copy-and-pasto in error message

from 2fe3bdbd69

2 years agoFix prove_installcheck when used with PGXS
Peter Eisentraut [Fri, 5 May 2023 04:29:49 +0000 (06:29 +0200)]
Fix prove_installcheck when used with PGXS

Commit 153e215677 added the portlock directory.  This is created in
$ENV{top_builddir} if it is set.  Under PGXS, top_builddir points into
the installation directory, which is not necessarily writable and in
any case inappropriate to use by a test suite.  The cause of the
problem is that the prove_installcheck target in Makefile.global
exports top_builddir, which isn't useful (since no other Perl code
actually reads it) and breaks this use case.  The reason this code is
there is probably that is has been dragged around with various other
changes, in particular a0fc813266, but without a real purpose of its
own.  By just removing the exporting of top_builddir in
prove_installcheck, the portlock directory then ends up under
tmp_check in the build directory, which is more suitable.

Reviewed-by: Andrew Dunstan <[email protected]>
Discussion: https://www.postgresql.org/message-id/78d1cfa6-0065-865d-584b-cde6d8c18aff@enterprisedb.com

2 years agoMove return statements out of PG_TRY blocks.
Nathan Bossart [Wed, 3 May 2023 18:32:43 +0000 (11:32 -0700)]
Move return statements out of PG_TRY blocks.

If we exit a PG_TRY block early via "continue", "break", "goto", or
"return", we'll skip unwinding its exception stack.  This change
moves a couple of such "return" statements in PL/Python out of
PG_TRY blocks.  This was introduced in d0aa965c0a and affects all
supported versions.

We might also be able to add compile-time checks to prevent
recurrence, but that is left as a future exercise.

Reported-by: Mikhail Gribkov, Xing Guo
Author: Xing Guo
Reviewed-by: Michael Paquier, Andres Freund, Tom Lane
Discussion: https://postgr.es/m/CAMEv5_v5Y%2B-D%3DCO1%2Bqoe16sAmgC4sbbQjz%2BUtcHmB6zcgS%2B5Ew%40mail.gmail.com
Discussion: https://postgr.es/m/CACpMh%2BCMsGMRKFzFMm3bYTzQmMU5nfEEoEDU2apJcc4hid36AQ%40mail.gmail.com
Backpatch-through: 11 (all supported versions)

2 years agoFix ExecCheckPermissions call in RI_Initial_Check
Alvaro Herrera [Thu, 4 May 2023 17:55:56 +0000 (19:55 +0200)]
Fix ExecCheckPermissions call in RI_Initial_Check

RI_Initial_Check was setting up a list of RTEPermissionInfo for
ExecCheckPermissions() wrong, and the problem is subtle enough that it
doesn't have any immediate effect in core code.  However, if an
extension is using the ExecutorCheckPerms_hook, then it would get the
wrong parameters and perhaps arrive at a wrong conclusion, or outright
malfunction.  Fix by constructing that list and the RTE list more
honestly.

We also add an assertion check to verify that these lists match.  This
new assertion would have caught this bug.

Co-authored-by: Олег Целебровский (Oleg Tselebrovskii) <[email protected]>
Co-authored-by: Álvaro Herrera <[email protected]>
Reviewed-by: Amit Langote <[email protected]>
Discussion: https://postgr.es/m/3722b7a2cbe27a1796ee40824bd86dd1@postgrespro.ru

2 years agoIn array_position()/array_positions(), beware of empty input array.
Tom Lane [Thu, 4 May 2023 15:48:23 +0000 (11:48 -0400)]
In array_position()/array_positions(), beware of empty input array.

These functions incautiously fetched the array's first lower bound
even when the array is zero-dimensional, thus fetching the word
after the allocated array space.  While almost always harmless,
with very bad luck this could result in SIGSEGV.  Fix by adding
an early exit for empty input.

Per bug #17920 from Alexander Lakhin.

Discussion: https://postgr.es/m/17920-f7c228c627b6d02e%40postgresql.org

2 years agoTighten array dimensionality checks in Python -> SQL array conversion.
Tom Lane [Thu, 4 May 2023 15:00:33 +0000 (11:00 -0400)]
Tighten array dimensionality checks in Python -> SQL array conversion.

Like plperl before f47004add, plpython wasn't being sufficiently
careful about checking that list-of-list structures represent
rectangular arrays, so that it would accept some cases in which
different parts of the "array" are nested to different depths.
This was exacerbated by Python's weak distinction between
sequences and lists, so that in some cases strings could get
treated as though they are lists (and burst into individual
characters) even though a different ordering of the upper-level
list would give a different result.

Some of this behavior was unreachable (without risking a crash)
before 81eaaf65e.  It seems like a good idea to clean it all up
in the same releases, rather than shipping a non-crashing but
nonetheless visibly buggy behavior in the name of minimal change.
Hence, back-patch.

Per bug #17912 and further testing by Alexander Lakhin.

Discussion: https://postgr.es/m/17912-82ceed78731d9cdc@postgresql.org

2 years agoRevert "Move PartitionPruneInfo out of plan nodes into PlannedStmt"
Alvaro Herrera [Thu, 4 May 2023 10:09:59 +0000 (12:09 +0200)]
Revert "Move PartitionPruneInfo out of plan nodes into PlannedStmt"

This reverts commit ec386948948c and its fixup 589bb816499e.

This change was intended to support query planning avoiding acquisition
of locks on partitions that were going to be pruned; however, the
overall project took a different direction at [1] and this bit is no
longer needed.  Put things back the way they were as agreed in [2], to
avoid unnecessary complexity.

Discussion: [1] https://postgr.es/m/4191508.1674157166@sss.pgh.pa.us
Discussion: [2] https://postgr.es/m/20230502175409[email protected]

2 years agodoc: New glossary entries
Peter Eisentraut [Thu, 4 May 2023 04:44:38 +0000 (06:44 +0200)]
doc: New glossary entries

Add:

- "Restartpoint"
- "Log sequence number"

"LSN" was already listed in the Acronyms appendix, but it is more
suitable as a glossary entry, so move it there and have the acronyms
entry link into the glossary.

Also turn on DocBook parameter glossentry.show.acronym to show
acronyms for glossary entries, which is being used here.

Reviewed-by: Daniel Gustafsson <[email protected]>
Reviewed-by: Alvaro Herrera <[email protected]>
Discussion: https://www.postgresql.org/message-id/flat/60915312-62cd-9c94-0d94-556023ece45f%40enterprisedb.com

2 years agoTest that invalidated logical slots doesn't retain WAL.
Amit Kapila [Thu, 4 May 2023 03:03:56 +0000 (08:33 +0530)]
Test that invalidated logical slots doesn't retain WAL.

Author: Bertrand Drouvot
Reviewed-by: Shi yu, Amit Kapila, Vignesh C
Discussion: https://postgr.es/m/2fefa454-5a70-2174-ddbf-4a0e41537139@gmail.com

2 years agoAdd missing TAP test name
Peter Eisentraut [Wed, 3 May 2023 09:08:24 +0000 (11:08 +0200)]
Add missing TAP test name