Michael Paquier [Fri, 30 Jun 2023 04:54:48 +0000 (13:54 +0900)]
Fix marking of indisvalid for partitioned indexes at creation
The logic that introduced partitioned indexes missed a few things when
invalidating a partitioned index when these are created, still the code
is written to handle recursions:
1) If created from scratch because a mapping index could not be found,
the new index created could be itself invalid, if for example it was a
partitioned index with one of its leaves invalid.
2) A CCI was missing when indisvalid is set for a parent index, leading
to inconsistent trees when recursing across more than one level for a
partitioned index creation if an invalidation of the parent was
required.
This could lead to the creation of a partition index tree where some of
the partitioned indexes are marked as invalid, but some of the parents
are marked valid, which is not something that should happen (as
validatePartitionedIndex() defines, indisvalid is switched to true for a
partitioned index iff all its partitions are themselves valid).
This patch makes sure that indisvalid is set to false on a partitioned
index if at least one of its partition is invalid. The flag is set to
true if *all* its partitions are valid.
The regression test added in this commit abuses of a failed concurrent
index creation, marked as invalid, that maps with an index created on
its partitioned table afterwards.
Reported-by: Alexander Lakhin
Reviewed-by: Alexander Lakhin
Discussion: https://postgr.es/m/
14987634-43c0-0cb3-e075-
94d423607e08@gmail.com
Backpatch-through: 11
Michael Paquier [Fri, 30 Jun 2023 01:28:08 +0000 (10:28 +0900)]
Add tab completion for CREATE SCHEMA in psql
The following patterns are added for CREATE SCHEMA:
- AUTHORIZATION, without a schema name or after a schema name.
- Possible list of owner roles after AUTHORIZATION.
- CREATE and GRANT within the supported set of commands.
- Correct object types supported in an embedded CREATE SCHEMA command.
While on it, this commit adjusts the completion done after CREATE
UNLOGGED:
- Addition of SEQUENCE.
- Avoid suggesting MATERIALIZED VIEW in CREATE TABLE.
Author: Dagfinn Ilmari Mannsåker
Reviewed-by: Suraj Khamkar, Michael Paquier
Discussion: https://postgr.es/m/
[email protected]
Michael Paquier [Fri, 30 Jun 2023 00:16:27 +0000 (09:16 +0900)]
Use named captures in Catalog::ParseHeader()
Using at least perl 5.14 is required since
4c15327, meaning that it is
possible to use named captures and the %+ hash instead of having to
count parenthesis groups manually.
While on it, CATALOG is made more flexible in its handling of
whitespaces for parameter lists (see the addition of \s* in this
case). The generated postgres.bki remains exactly the same before and
after this commit.
Author: Dagfinn Ilmari Mannsåker
Reviewed-by: John Naylor
Discussion: https://postgr.es/m/
[email protected]
Tom Lane [Thu, 29 Jun 2023 23:05:23 +0000 (19:05 -0400)]
Stamp HEAD as 17devel.
Let the hacking begin ...
Michael Paquier [Thu, 29 Jun 2023 22:49:01 +0000 (07:49 +0900)]
Fix pg_depend entry to AMs after ALTER TABLE .. SET ACCESS METHOD
ALTER TABLE .. SET ACCESS METHOD was not registering a dependency to the
new access method with the relation altered in its rewrite phase, making
possible the drop of an access method even if there are relations that
depend on it. During the rewrite, a temporary relation is created to
build the new relation files before swapping the new and old files, and,
while the temporary relation was registering a correct dependency to the
new AM, the old relation did not do that. A dependency on the access
method is added when the relation files are swapped, which is the point
where pg_class is updated.
Materialized views and tables use the same code path, hence both were
impacted.
Backpatch down to 15, where this command has been introduced.
Reported-by: Alexander Lakhin
Reviewed-by: Nathan Bossart, Andres Freund
Discussion: https://postgr.es/m/18000-
9145c25b1af475ca@postgresql.org
Backpatch-through: 15
Andres Freund [Thu, 29 Jun 2023 16:12:52 +0000 (09:12 -0700)]
meson: Remove redundant return code check
run_command(check: true) already would have errorred out before the check is
reached.
Author: Tristan Partin <
[email protected]>
Discussion: CSPIJVUDZFKX.3KHMOAVGF94RV@c3po
Tom Lane [Thu, 29 Jun 2023 16:12:52 +0000 (12:12 -0400)]
Defend against bogus parameterization of join input paths.
An outer join cannot be formed using an input path that is parameterized
by a value that is supposed to be nulled by the outer join. This is
obviously nonsensical, and it could lead to a bad plan being selected;
although currently it seems that we'll hit various sanity-check
assertions first.
I think that such cases were formerly prevented by the delay_upper_joins
mechanism, but now that that's gone we need an explicit check.
(Perhaps we should avoid generating baserel paths that could
lead to this situation in the first place; but it seems like
having a defense at the join level would be a good idea anyway.)
Richard Guo and Tom Lane, per report from Jaime Casanova
Discussion: https://postgr.es/m/CAJKUy5g2uZRrUDZJ8p-=giwcSHVUn0c9nmdxPSY0jF0Ov8VoEA@mail.gmail.com
Tom Lane [Thu, 29 Jun 2023 14:19:10 +0000 (10:19 -0400)]
Fix order of operations in ExecEvalFieldStoreDeForm().
If the given composite datum is toasted out-of-line,
DatumGetHeapTupleHeader will perform database accesses to detoast it.
That can invalidate the result of get_cached_rowtype, as documented
(perhaps not plainly enough) in that function's API spec; which leads
to strange errors or crashes when we try to use the TupleDesc to read
the tuple. In short then, trying to update a field of a composite
column could fail intermittently if the overall column value is wide
enough to require toasting.
We can fix the bug at no cost by just changing the order of
operations, since we don't need the TupleDesc until after detoasting.
(Other callers of get_cached_rowtype appear to get this right already,
so there's only one bug.)
Note that the added regression test case reveals this bug reliably
only with debug_discard_caches/CLOBBER_CACHE_ALWAYS.
Per bug #17994 from Alexander Lakhin. Sadly, this patch does not fix
the missing-values issue revealed in the bug discussion; we'll need
some more work to cover that.
Discussion: https://postgr.es/m/17994-
5c7100b51b4790e9@postgresql.org
Peter Eisentraut [Thu, 29 Jun 2023 11:16:52 +0000 (13:16 +0200)]
meson: Fix intl misspelling
Author: Tristan Partin <
[email protected]>
Discussion: https://www.postgresql.org/message-id/flat/CSPIJVUDZFKX.3KHMOAVGF94RV%40c3po
Peter Eisentraut [Thu, 29 Jun 2023 11:06:41 +0000 (13:06 +0200)]
meson: Use a better error message in an impossible case
Meson validates 'choice' options for us, so technically this case is
impossible. A better error message helps people reading the code
understand what is going on in that branch.
Author: Tristan Partin <
[email protected]>
Discussion: https://www.postgresql.org/message-id/flat/CSPIJVUDZFKX.3KHMOAVGF94RV%40c3po
Peter Eisentraut [Thu, 29 Jun 2023 11:06:02 +0000 (13:06 +0200)]
meson: Make some Meson style more consistent with surrounding code
Author: Tristan Partin <
[email protected]>
Discussion: https://www.postgresql.org/message-id/flat/CSPIJVUDZFKX.3KHMOAVGF94RV%40c3po
Peter Eisentraut [Thu, 29 Jun 2023 11:05:05 +0000 (13:05 +0200)]
meson: Fix some grammar usage in Meson comments
Author: Tristan Partin <
[email protected]>
Discussion: https://www.postgresql.org/message-id/flat/CSPIJVUDZFKX.3KHMOAVGF94RV%40c3po
Peter Eisentraut [Thu, 29 Jun 2023 11:04:04 +0000 (13:04 +0200)]
meson: Mention the correct way to disable readline support
Using false to disable a feature option is incorrect.
Author: Tristan Partin <
[email protected]>
Discussion: https://www.postgresql.org/message-id/flat/CSPIJVUDZFKX.3KHMOAVGF94RV%40c3po
Peter Eisentraut [Thu, 29 Jun 2023 11:03:19 +0000 (13:03 +0200)]
meson: Remove old comment
That portion of code is not run in the Windows case already given the
structure of the surrounding if statement.
Author: Tristan Partin <
[email protected]>
Discussion: https://www.postgresql.org/message-id/flat/CSPIJVUDZFKX.3KHMOAVGF94RV%40c3po
Peter Eisentraut [Thu, 29 Jun 2023 10:56:30 +0000 (12:56 +0200)]
meson: Use the not_found_dep constant
Previously in the build description, a not_found_dep was defined. Make
use of it.
Author: Tristan Partin <
[email protected]>
Discussion: https://www.postgresql.org/message-id/flat/CSPIJVUDZFKX.3KHMOAVGF94RV%40c3po
Peter Eisentraut [Thu, 29 Jun 2023 10:53:41 +0000 (12:53 +0200)]
meson: Attach colon to keyword argument
This matches the style found in the rest of the Meson build description.
Author: Tristan Partin <
[email protected]>
Discussion: https://www.postgresql.org/message-id/flat/CSPIJVUDZFKX.3KHMOAVGF94RV%40c3po
Peter Eisentraut [Thu, 29 Jun 2023 10:52:12 +0000 (12:52 +0200)]
meson: Use consistent Meson option description formats
Author: Tristan Partin <
[email protected]>
Discussion: https://www.postgresql.org/message-id/flat/CSPIJVUDZFKX.3KHMOAVGF94RV%40c3po
Peter Eisentraut [Thu, 29 Jun 2023 10:47:33 +0000 (12:47 +0200)]
meson: Use consistent casing in Meson option descriptions
Meson itself uses capital letters for option descriptions, so follow
that.
Author: Tristan Partin <
[email protected]>
Discussion: https://www.postgresql.org/message-id/flat/CSPIJVUDZFKX.3KHMOAVGF94RV%40c3po
Peter Eisentraut [Thu, 29 Jun 2023 10:44:27 +0000 (12:44 +0200)]
meson: Remove triple-quoted strings
Triple-quoted strings are for multiline strings in Meson. None of the
descriptions that got changed were multiline and the entire file uses
single-line descriptions.
Author: Tristan Partin <
[email protected]>
Discussion: https://www.postgresql.org/message-id/flat/CSPIJVUDZFKX.3KHMOAVGF94RV%40c3po
Peter Eisentraut [Thu, 29 Jun 2023 08:30:55 +0000 (10:30 +0200)]
Remove inappropriate raw_expression_tree_walker() code
It was walking into the ColumnDef->compression field, which is not a
node but a string. This code is currently not reachable (because the
compression field is only set in situations that don't go through
raw_expression_tree_walker()), but if it had been, this could have
behaved erratically.
Peter Eisentraut [Thu, 29 Jun 2023 07:14:55 +0000 (09:14 +0200)]
Error message wording improvements
Nathan Bossart [Thu, 29 Jun 2023 04:32:53 +0000 (21:32 -0700)]
Fix psql \?'s entries for \dp and \z.
d913928c9c added support for the "S" modifier to psql's \dp and \z
meta-commands, but it missed updating the corresponding entries in
\?'s output.
Author: Noriyoshi Shinoda
Discussion: https://postgr.es/m/DM4PR84MB17342A51B3A1556CFBC7A4B2EE25A%40DM4PR84MB1734.NAMPRD84.PROD.OUTLOOK.COM
Michael Paquier [Thu, 29 Jun 2023 00:17:26 +0000 (09:17 +0900)]
pg_stat_statements: Fix second comment related to entry resets
This should have been part of
dc73db6, but it got lost in the mix.
Oversight in
6b4d23f.
Author: Japin Li
Discussion: https://postgr.es/m/MEYP282MB1669FC91C764E277821936D3B624A@MEYP282MB1669.AUSP282.PROD.OUTLOOK.COM
Backpatch-through: 14
Michael Paquier [Wed, 28 Jun 2023 23:04:47 +0000 (08:04 +0900)]
pg_stat_statements: Fix incorrect comment with entry resets
Oversight in
6b4d23f.
Author: Japin Li, Richard Guo
Discussion: https://postgr.es/m/MEYP282MB1669FC91C764E277821936D3B624A@MEYP282MB1669.AUSP282.PROD.OUTLOOK.COM
Backpatch-through: 14
Peter Eisentraut [Wed, 28 Jun 2023 17:30:26 +0000 (19:30 +0200)]
Reword error messages for consistency
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
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]
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 backpatch all the
way down to v11.
Reported-by: Alexander Lakhin
Discussion: https://postgr.es/
14987634-43c0-0cb3-e075-
94d423607e08@gmail.com
Backpatch-through: 11
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]
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
Tom Lane [Mon, 26 Jun 2023 20:07:19 +0000 (16:07 -0400)]
Stamp 16beta2.
Bruce Momjian [Mon, 26 Jun 2023 17:44:40 +0000 (13:44 -0400)]
doc: PG 16 relnotes, update for beta 2
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
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]
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-patch
to all supported branches.
Discussion: https://postgr.es/m/17995-
9f20ff3e6389db4c@postgresql.org
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]
Backpatch-through: 11
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.
Peter Eisentraut [Fri, 23 Jun 2023 12:48:38 +0000 (14:48 +0200)]
doc: Improve punctuation
Peter Eisentraut [Fri, 23 Jun 2023 12:14:57 +0000 (14:14 +0200)]
doc: Clean up title case use
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
Backpatch-through: 14
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
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
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
Backpatch-through: 11
Discussion: https://postgr.es/m/
5bb2c9a2-499f-e1a2-6e33-
5ce96b35cc4a@postgresql.org
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
Backpatch-through: 11
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 backpatched 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
Backpatch: 11- (all supported versions).
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
Backpatch-through: 11
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]
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
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-patch to all
supported branches.
Discussion: https://postgr.es/m/17983-
da4569fcb878672e@postgresql.org
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
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
Backpatch-through: 13
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
Backpatch-through: 11
Discussion: https://postgr.es/m/
807bdf85-61ea-88e2-5712-
6d9fcd4eabff@fortnox.se
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
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-patch to v12.
Discussion: https://postgr.es/m/17985-
748b66607acd432e@postgresql.org
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
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
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
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
Tom Lane [Tue, 20 Jun 2023 13:52:52 +0000 (09:52 -0400)]
Add
b334612b8 to .git-blame-ignore-revs.
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
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
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]
Backpatch-through: 13
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 backpatch - 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]
Backpatch: -
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
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
Backpatch-through: 11, all supported versions
Discussion: https://postgr.es/m/17975-
98a90c156f25c952%40postgresql.org
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
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).
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
Amit Langote [Fri, 16 Jun 2023 01:04:22 +0000 (10:04 +0900)]
Fix typo in comment.
Back-patch down to 11.
Author: Sho Kato (<
[email protected]>)
Discussion: https://postgr.es/m/TYCPR01MB68499042A33BC32241193AAF9F5BA%40TYCPR01MB6849.jpnprd01.prod.outlook.com
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
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
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.
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
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
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
Backpatch-through: 11
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 patch
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
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]
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
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
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
Backpatch-through: 15
Discussion: https://postgr.es/m/CAD21AoDmCqpS%2BU6b9Bc-b4OFx3tz%3DNv6O2KVkoVg7sHk60spjA%40mail.gmail.com
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
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-patch all the way.
Discussion: https://postgr.es/m/17972-
f422c094237847d0@postgresql.org
Peter Eisentraut [Tue, 13 Jun 2023 13:00:52 +0000 (15:00 +0200)]
doc: Move list entry to proper position
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 prototypes 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
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-patch to v13 where datetime()
was added, like the previous patch.
Discussion: https://postgr.es/m/
014A028B-5CE6-4FDF-AC24-
426CA6FC9CEE@mohiohio.com
Noah Misch [Mon, 12 Jun 2023 14:40:39 +0000 (07:40 -0700)]
src/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: Move all.sym temporary file back to Debug/postgres.
Commit
70df2df1cc89e69e31b31b6aa0d65fd72935af38 moved it to the
top_srcdir, where it caused "git status" noise.
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]
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-patch, but make this late addition to v16.
Reviewed by Andres Freund and Magnus Hagander.
Discussion: https://postgr.es/m/
20230608014507[email protected]
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
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.
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
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 backpatch all the way down.
Author: Evan Jones
Discussion: https://postgr.es/m/CA+HWA9awUW0+RV_gO9r1ABZwGoZxPztcJxPy8vMFSTbTfi4jig@mail.gmail.com
Backpatch-through: 11
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
Peter Geoghegan [Sat, 10 Jun 2023 20:55:15 +0000 (13:55 -0700)]
Add another old commit to git-blame-ignore-revs.
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.
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]
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
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 backpatch.
Discussion: https://postgr.es/m/
e44327179e5c9015c8dda67351c04da552066017.camel%40j-davis.com
Reviewed-by: Greg Stark
Reviewed-by: Nathan Bossart
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