Alexander Korotkov [Mon, 8 Jan 2024 22:08:35 +0000 (00:08 +0200)]
Fix misuse of RelOptInfo.unique_for_rels cache by SJE
When SJE uses RelOptInfo.unique_for_rels cache, it passes filtered quals to
innerrel_is_unique_ext(). That might lead to an invalid match to cache entries
made by previous non self-join checking calls. Add UniqueRelInfo.self_join
flag to prevent such cases. Also, fix that SJE should require a strict match
of outerrelids to make sure UniqueRelInfo.extra_clauses are valid.
Reported-by: Alexander Lakhin
Discussion: https://postgr.es/m/
4788f781-31bd-9796-d7d6-
588a751c8787%40gmail.com
Noah Misch [Mon, 8 Jan 2024 19:39:56 +0000 (11:39 -0800)]
Make dblink interruptible, via new libpqsrv APIs.
This replaces dblink's blocking libpq calls, allowing cancellation and
allowing DROP DATABASE (of a database not involved in the query). Apart
from explicit dblink_cancel_query() calls, dblink still doesn't cancel
the remote side. The replacement for the blocking calls consists of
new, general-purpose query execution wrappers in the libpqsrv facility.
Out-of-tree extensions should adopt these. Use them in postgres_fdw,
replacing a local implementation from which the libpqsrv implementation
derives. This is a bug fix for dblink. Code inspection identified the
bug at least thirteen years ago, but user complaints have not appeared.
Hence, no back-patch for now.
Discussion: https://postgr.es/m/
20231122012945.74@rfd.leadboat.com
Noah Misch [Mon, 8 Jan 2024 19:39:56 +0000 (11:39 -0800)]
Remove excess #include "utils/wait_event.h".
This simplifies copying libpq/libpq-be-fe-helpers.h into extensions,
because some supported PostgreSQL versions lack the other header.
Discussion: https://postgr.es/m/
20231122012945.74@rfd.leadboat.com
Noah Misch [Mon, 8 Jan 2024 19:39:56 +0000 (11:39 -0800)]
Fix missing word in comment.
Alexander Korotkov [Mon, 8 Jan 2024 17:43:05 +0000 (19:43 +0200)]
Fix indentation in ExecParallelHashIncreaseNumBatches()
Backpatch-through: 12
Tom Lane [Mon, 8 Jan 2024 16:48:44 +0000 (11:48 -0500)]
Allow examine_simple_variable() to work on INSERT RETURNING Vars.
Since commit
599b33b94, this function assumed that every RTE_RELATION
RangeTblEntry would have an associated RelOptInfo. But that's not so:
we only build RelOptInfos for relations that are scanned by the query.
In particular the target of an INSERT won't have one, so that Vars
appearing in an INSERT ... RETURNING list will not have an associated
RelOptInfo. This apparently wasn't a problem before commit
f7816aec2
taught examine_simple_variable() to drill down into CTEs containing
INSERT RETURNING, but it is now.
To fix, add a fallback code path that gets the userid to use directly
from the RTEPermissionInfo associated with the RTE. (Sadly, we must
have two code paths, because not every RTE has a RTEPermissionInfo
either.)
Per report from Alexander Lakhin. No back-patch, since the case is
apparently unreachable before
f7816aec2.
Discussion: https://postgr.es/m/
608a4886-6c60-0f9e-97d5-
591256bd4150@gmail.com
Alexander Korotkov [Mon, 8 Jan 2024 13:00:42 +0000 (15:00 +0200)]
Strengthen tests for
5ef34a8fc3
The test query in
5ef34a8fc3 is running over the empty emp1 table giving the
same (empty) return both with and without the fix. Add one row to that table
to make not just the test query plan, but also the test query result different.
Reported-by: Richard Guo
Bug: #18261
Discussion: https://postgr.es/m/CAMbWs49igjcszLgicb4D1N21_5iNDoxheJ7KFmAcs_z%3DLx6jhg%40mail.gmail.com
Tom Lane [Sun, 7 Jan 2024 20:19:50 +0000 (15:19 -0500)]
Fix integer-overflow problem in intarray's g_int_decompress().
An array element equal to INT_MAX gave this code indigestion,
causing an infinite loop that surely ended in SIGSEGV. We fixed
some nearby problems awhile ago (cf
757c5182f) but missed this.
Report and diagnosis by Alexander Lakhin (bug #18273); patch by me
Discussion: https://postgr.es/m/18273-
9a832d1da122600c@postgresql.org
Alexander Korotkov [Sun, 7 Jan 2024 07:03:55 +0000 (09:03 +0200)]
Fix oversized memory allocation in Parallel Hash Join
During the calculations of the maximum for the number of buckets, take into
account that later we round that to the next power of 2.
Reported-by: Karen Talarico
Bug: #16925
Discussion: https://postgr.es/m/16925-
ec96d83529d0d629%40postgresql.org
Author: Thomas Munro, Andrei Lepikhov, Alexander Korotkov
Reviewed-by: Alena Rybakina
Backpatch-through: 12
Alexander Korotkov [Sat, 6 Jan 2024 12:09:39 +0000 (14:09 +0200)]
Fix the issue that SJE mistakenly omits qual clauses
When the SJE code handles the transfer of qual clauses from the removed
relation to the remaining one, it replaces the Vars of the removed
relation with the Vars of the remaining relation for each clause, and
then reintegrates these clauses into the appropriate restriction or join
clause lists, while attempting to avoid duplicates.
However, the code compares RestrictInfo->clause to determine if two
clauses are duplicates. This is just flat wrong. Two RestrictInfos
with the same clause can have different required_relids,
incompatible_relids, is_pushed_down, and so on. This can cause qual
clauses to be mistakenly omitted, leading to wrong results.
This patch fixes it by comparing the entire RestrictInfos not just their
clauses ignoring 'rinfo_serial' field (otherwise almost all RestrictInfos will
be unique). Making 'rinfo_serial' equal_ignore would break other code. This
is why this commit implements our own comparison function for checking the
equality of RestrictInfos.
Reported-by: Zuming Jiang
Bug: #18261
Discussion: https://postgr.es/m/18261-
2a75d748c928609b%40postgresql.org
Author: Richard Guo
Tom Lane [Fri, 5 Jan 2024 19:32:34 +0000 (14:32 -0500)]
Clean up some edge cases in plpgsql's %TYPE parsing.
Support referencing a composite-type variable in %TYPE.
Remove the undocumented, untested, and pretty useless ability
to have the subject of %TYPE be an (unqualified) type name.
You get the same result by just not writing %TYPE.
Add or adjust some test cases to improve code coverage here.
Discussion: https://postgr.es/m/716852.
1704402127@sss.pgh.pa.us
Andrew Dunstan [Fri, 5 Jan 2024 13:15:50 +0000 (13:15 +0000)]
Add copyright notices to a few perl scripts that don't have them
Michael Paquier [Fri, 5 Jan 2024 11:08:34 +0000 (20:08 +0900)]
Fix corruption of local buffer state during extend of temp relation
A typo has been introduced by
31966b151e6a when updating the state of a
local buffer when a temporary relation is extended, for the case of a
block included in the relation range extended, when it is already found
in the hash table holding the local buffers. In this case, BM_VALID
should be cleared, but the buffer state was changed so as BM_VALID
remained while clearing the other flags.
As reported on the thread, it was possible to corrupt the state of the
local buffers on ENOSPC, but the states would be corrupted on any kind
of ERROR during the relation extend (like partial writes or some other
errno).
Reported-by: Alexander Lakhin
Author: Tender Wang
Reviewed-by: Richard Guo, Alexander Lakhin, Michael Paquier
Discussion: https://postgr.es/m/18259-
6e256429825dd435@postgresql.org
Backpatch-through: 16
Tom Lane [Thu, 4 Jan 2024 23:36:19 +0000 (18:36 -0500)]
Teach estimate_array_length() to use statistics where available.
If we have DECHIST statistics about the argument expression, use
the average number of distinct elements as the array length estimate.
(It'd be better to use the average total number of elements, but
that is not currently calculated by compute_array_stats(), and
it's unclear that it'd be worth extra effort to get.)
To do this, we have to change the signature of estimate_array_length
to pass the "root" pointer. While at it, also change its result
type to "double". That's probably not really necessary, but it
avoids any risk of overflow of the value extracted from DECHIST.
All existing callers are going to use the result in a "double"
calculation anyway.
Paul Jungwirth, reviewed by Jian He and myself
Discussion: https://postgr.es/m/CA+renyUnM2d+SmrxKpDuAdpiq6FOM=FByvi6aS6yi__qyf6j9A@mail.gmail.com
Nathan Bossart [Thu, 4 Jan 2024 22:09:34 +0000 (16:09 -0600)]
Add macros for looping through a List without a ListCell.
Many foreach loops only use the ListCell pointer to retrieve the
content of the cell, like so:
ListCell *lc;
foreach(lc, mylist)
{
int myint = lfirst_int(lc);
...
}
This commit adds a few convenience macros that automatically
declare the loop variable and retrieve the current cell's contents.
This allows us to rewrite the previous loop like this:
foreach_int(myint, mylist)
{
...
}
This commit also adjusts a few existing loops in order to add
coverage for the new/adjusted macros. There is presently no plan
to bulk update all foreach loops, as that could introduce a
significant amount of back-patching pain. Instead, these macros
are primarily intended for use in new code.
Author: Jelte Fennema-Nio
Reviewed-by: David Rowley, Alvaro Herrera, Vignesh C, Tom Lane
Discussion: https://postgr.es/m/CAGECzQSwXKnxGwW1_Q5JE%2B8Ja20kyAbhBHO04vVrQsLcDciwXA%40mail.gmail.com
Tom Lane [Thu, 4 Jan 2024 20:24:15 +0000 (15:24 -0500)]
In plpgsql, allow %TYPE and %ROWTYPE to be followed by array decoration.
This provides the useful ability to declare a variable that is an array
of the type of some other variable or some table column.
Quan Zongliang, Pavel Stehule
Discussion: https://postgr.es/m/
ec4523e1-9e7e-f3ef-f9ce-
bafd680ad6f6@yeah.net
Peter Eisentraut [Thu, 4 Jan 2024 14:45:35 +0000 (15:45 +0100)]
ALTER TABLE command to change generation expression
This adds a new ALTER TABLE subcommand ALTER COLUMN ... SET EXPRESSION
that changes the generation expression of a generated column.
The syntax is not standard but was adapted from other SQL
implementations.
This command causes a table rewrite, using the usual ALTER TABLE
mechanisms. The implementation is similar to and makes use of some of
the infrastructure of the SET DATA TYPE subcommand (for example,
rebuilding constraints and indexes afterwards). The new command
requires a new pass in AlterTablePass, and the ADD COLUMN pass had to
be moved earlier so that combinations of ADD COLUMN and SET EXPRESSION
can work.
Author: Amul Sul <sulamul@gmail.com>
Discussion: https://www.postgresql.org/message-id/flat/CAAJ_b94yyJeGA-5M951_Lr+KfZokOp-2kXicpmEhi5FXhBeTog@mail.gmail.com
David Rowley [Thu, 4 Jan 2024 07:38:25 +0000 (20:38 +1300)]
Fix use of incorrect TupleTableSlot in DISTINCT aggregates
1349d2790 added code to allow DISTINCT and ORDER BY aggregates to work
more efficiently by using presorted input. That commit added some code
that made use of the AggState's tmpcontext and adjusted the
ecxt_outertuple and ecxt_innertuple slots before checking if the current
row is distinct from the previously seen row. That code forgot to set the
TupleTableSlots back to what they were originally, which could result in
errors such as:
ERROR: attribute 1 of type record has wrong type
This only affects aggregate functions which have multiple arguments when
DISTINCT is used. For example: string_agg(DISTINCT col, ', ')
Thanks to Tom Lane for identifying the breaking commit.
Bug: #18264
Reported-by: Vojtěch Beneš
Discussion: https://postgr.es/m/18264-
e363593d7e9feb7d@postgresql.org
Backpatch-through: 16, where
1349d2790 was added
Amit Kapila [Thu, 4 Jan 2024 02:51:51 +0000 (08:21 +0530)]
Track conflict_reason in pg_replication_slots.
This patch changes the existing 'conflicting' field to 'conflict_reason'
in pg_replication_slots. This new field indicates the reason for the
logical slot's conflict with recovery. It is always NULL for physical
slots, as well as for logical slots which are not invalidated. The
non-NULL values indicate that the slot is marked as invalidated. Possible
values are:
wal_removed = required WAL has been removed.
rows_removed = required rows have been removed.
wal_level_insufficient = the primary doesn't have a wal_level sufficient
to perform logical decoding.
The existing users of 'conflicting' column can get the same answer by
using 'conflict_reason' IS NOT NULL.
Author: Shveta Malik
Reviewed-by: Amit Kapila, Bertrand Drouvot, Michael Paquier
Discussion: https://postgr.es/m/ZYOE8IguqTbp-seF@paquier.xyz
Bruce Momjian [Thu, 4 Jan 2024 01:49:05 +0000 (20:49 -0500)]
Update copyright for 2024
Reported-by: Michael Paquier
Discussion: https://postgr.es/m/ZZKTDPxBBMt3C0J9@paquier.xyz
Backpatch-through: 12
Michael Paquier [Wed, 3 Jan 2024 23:47:34 +0000 (08:47 +0900)]
doc: fix typo "vertexes" -> "vertices"
The "vertexes" spelling is also valid, but we consistently use
"vertices" elsewhere.
Author: Dagfinn Ilmari Mannsåker
Reviewed-by: Shubham Khanna
Discussion: https://postgr.es/m/87le9fmi01.fsf@wibble.ilmari.org
Tom Lane [Wed, 3 Jan 2024 22:40:38 +0000 (17:40 -0500)]
Avoid masking EOF (no-password-supplied) conditions in auth.c.
CheckPWChallengeAuth() would return STATUS_ERROR if the user does not
exist or has no password assigned, even if the client disconnected
without responding to the password challenge (as libpq often will,
for example). We should return STATUS_EOF in that case, and the
lower-level functions do, but this code level got it wrong since the
refactoring done in
7ac955b34. This breaks the intent of not logging
anything for EOF cases (cf. comments in auth_failed()) and might
also confuse users of ClientAuthentication_hook.
Per report from Liu Lang. Back-patch to all supported versions.
Discussion: https://postgr.es/m/
b725238c-539d-cb09-2bff-
b5e6cb2c069c@esgyn.cn
Peter Eisentraut [Wed, 3 Jan 2024 20:56:41 +0000 (21:56 +0100)]
Second attempt at organizing jsonpath operators and methods
Second attempt at
283a95da923. Since we can't reorder the enum values
of JsonPathItemType, instead reorder the switch cases where they are
used to generally follow the order of the enum values, for better
maintainability.
Peter Eisentraut [Wed, 3 Jan 2024 20:02:49 +0000 (21:02 +0100)]
Revert "Reorganise jsonpath operators and methods"
This reverts commit
283a95da923605c1cc148155db2d865d0801b419.
The reordering of JsonPathItemType affects the binary on-disk
compatibility of the jsonpath type, so we must not change it. Revert
for now and consider.
Tom Lane [Wed, 3 Jan 2024 17:22:00 +0000 (12:22 -0500)]
Doc: Python's control flow construct is try/except not try/catch.
Very ancient thinko, dating evidently to
22690719e.
Spotted by gweatherby.
Discussion: https://postgr.es/m/
170423637139.
1288848.
11840082988774620003@wrigleys.postgresql.org
Robert Haas [Wed, 3 Jan 2024 14:59:46 +0000 (09:59 -0500)]
Fix defects in PrepareForIncrementalBackup.
Swap the arguments to TimestampDifferenceMilliseconds so that we get
a positive answer instead of zero.
Then use the result of that computation instead of ignoring it.
Per reports from Alexander Lakhin.
Discussion: http://postgr.es/m/
8b686764-7ac1-74c3-70f9-
b64685a2535f@gmail.com
Peter Eisentraut [Wed, 3 Jan 2024 12:16:55 +0000 (13:16 +0100)]
Make Perl warnings fatal in newly added TAP tests
New TAP tests added by commits
9a17be1e and
4710b67d missed to convert
warnings to FATAL. This commit fixes that.
Author: Bharath Rupireddy <bharath.rupireddyforpostgres@gmail.com>
Peter Eisentraut [Wed, 3 Jan 2024 10:25:33 +0000 (11:25 +0100)]
Reorganise jsonpath operators and methods
Various jsonpath operators and methods add various keywords, switch
cases, and documentation entries in some order. However, they are not
consistent; reorder them for better maintainability or readability.
Author: Jeevan Chalke <jeevan.chalke@enterprisedb.com>
Discussion: https://www.postgresql.org/message-id/flat/CAM2+6=XjTyqrrqHAOj80r0wVQxJSxc0iyib9bPC55uFO9VKatg@mail.gmail.com
Peter Eisentraut [Wed, 3 Jan 2024 09:05:35 +0000 (10:05 +0100)]
Add numeric_int8_opt_error() to optionally suppress errors
This matches the existing numeric_int4_opt_error() (see commit
16d489b0fe). It will be used by a future JSON-related patch, which
wants to report errors in its own way and thus does not want the
internal functions to throw any error.
Author: Jeevan Chalke <jeevan.chalke@enterprisedb.com>
Discussion: https://www.postgresql.org/message-id/flat/CAM2+6=XjTyqrrqHAOj80r0wVQxJSxc0iyib9bPC55uFO9VKatg@mail.gmail.com
Peter Eisentraut [Wed, 3 Jan 2024 07:48:09 +0000 (08:48 +0100)]
Refactor: separate function to find all objects depending on a column
Move code from ATExecAlterColumnType() that finds the all the objects
that depend on the column to a separate function. A future patch will
reuse this code.
Author: Amul Sul <sulamul@gmail.com>
Discussion: https://www.postgresql.org/message-id/flat/CAAJ_b94yyJeGA-5M951_Lr+KfZokOp-2kXicpmEhi5FXhBeTog@mail.gmail.com
Michael Paquier [Wed, 3 Jan 2024 05:22:54 +0000 (14:22 +0900)]
Fix some typos
Author: Dagfinn Ilmari Mannsåker
Reviewed-by: Shubham Khanna
Discussion: https://postgr.es/m/87le9fmi01.fsf@wibble.ilmari.org
Michael Paquier [Wed, 3 Jan 2024 01:28:05 +0000 (10:28 +0900)]
Remove unnecessary PGDATABASE settings from TAP tests
Some of the TAP tests have been historically setting the environment
variable PGDATABASE to 'postgres', which is not needed because
PostgreSQL::Test::Cluster already sets it when initialized. This commit
removes these explicit setups.
Note that the dependency of cluster -a with PGDATABASE (from
1caef31d9e55) is still documented.
Author: Bharath Rupireddy
Discussion: https://postgr.es/m/CALj2ACXLAz5dW3ZP+Fec8g6jQMMmDyCVT+qdbye2h7QJJmhsdw@mail.gmail.com
Tom Lane [Tue, 2 Jan 2024 19:57:21 +0000 (14:57 -0500)]
Minor fixes for search path cache code.
Avoid leaving a dangling pointer in the unlikely event that
nsphash_create fails. Improve comments, and fix formatting by
adding typedefs.list entries.
Discussion: https://postgr.es/m/
3972900.
1704145107@sss.pgh.pa.us
Robert Haas [Tue, 2 Jan 2024 18:17:23 +0000 (13:17 -0500)]
Remove Lock suffix from WALSummarizerLock in wait_event_names.txt
Nathan Bossart
Discussion: https://postgr.es/m/
20240102173120.GA1061678@nathanxps13
Robert Haas [Tue, 2 Jan 2024 17:27:38 +0000 (12:27 -0500)]
jsonpath_exec: fix typo "absense" -> "absence"
Dagfinn Ilmari Mannsåker, reviewed by Shubham Khanna.
Discussion: http://postgr.es/m/87le9fmi01.fsf@wibble.ilmari.org
Robert Haas [Tue, 2 Jan 2024 17:27:09 +0000 (12:27 -0500)]
libpq: fix typo "occurences" -> "occurrences" in tests
Dagfinn Ilmari Mannsåker, reviewed by Shubham Khanna.
Discussion: http://postgr.es/m/87le9fmi01.fsf@wibble.ilmari.org
Robert Haas [Tue, 2 Jan 2024 17:24:28 +0000 (12:24 -0500)]
gist: fix typo "split(t)ed" -> "split"
Dagfinn Ilmari Mannsåker, reviewed by Shubham Khanna.
Discussion: http://postgr.es/m/87le9fmi01.fsf@wibble.ilmari.org
Robert Haas [Tue, 2 Jan 2024 17:23:36 +0000 (12:23 -0500)]
tsquery: fix typo "rewrited" -> "rewritten"
Dagfinn Ilmari Mannsåker, reviewed by Shubham Khanna.
Discussion: http://postgr.es/m/87le9fmi01.fsf@wibble.ilmari.org
Robert Haas [Tue, 2 Jan 2024 16:56:02 +0000 (11:56 -0500)]
Fix typos in comments and in one isolation test.
Dagfinn Ilmari Mannsåker, reviewed by Shubham Khanna. Some subtractions
by me.
Discussion: http://postgr.es/m/87le9fmi01.fsf@wibble.ilmari.org
Robert Haas [Tue, 2 Jan 2024 15:31:49 +0000 (10:31 -0500)]
Add WALSummarizerLock to wait_event_names.txt
Per report from Nathan Bossart.
Discussion: http://postgr.es/m/
20231227153647.GA601861@nathanxps13
Peter Eisentraut [Tue, 2 Jan 2024 09:18:47 +0000 (10:18 +0100)]
Fix typos in simplehash.h
Author: Richard Guo <guofenglinux@gmail.com>
Discussion: https://www.postgresql.org/message-id/flat/18252-
d46d27900a277d87@postgresql.org
Alexander Korotkov [Tue, 2 Jan 2024 07:48:50 +0000 (09:48 +0200)]
Replace the relid in some missing fields during SJE
Reported-by: Alexander Lakhin
Discussion: https://postgr.es/m/
a89f480f-8143-0965-f22d-
0a892777f501%40gmail.com
Author: Andrei Lepikhov
Amit Kapila [Tue, 2 Jan 2024 02:38:46 +0000 (08:08 +0530)]
Allow upgrades to preserve the full subscription's state.
This feature will allow us to replicate the changes on subscriber nodes
after the upgrade.
Previously, only the subscription metadata information was preserved.
Without the list of relations and their state, it's not possible to
re-enable the subscriptions without missing some records as the list of
relations can only be refreshed after enabling the subscription (and
therefore starting the apply worker). Even if we added a way to refresh
the subscription while enabling a publication, we still wouldn't know
which relations are new on the publication side, and therefore should be
fully synced, and which shouldn't.
To preserve the subscription relations, this patch teaches pg_dump to
restore the content of pg_subscription_rel from the old cluster by using
binary_upgrade_add_sub_rel_state SQL function. This is supported only
in binary upgrade mode.
The subscription's replication origin is needed to ensure that we don't
replicate anything twice.
To preserve the replication origins, this patch teaches pg_dump to update
the replication origin along with creating a subscription by using
binary_upgrade_replorigin_advance SQL function to restore the
underlying replication origin remote LSN. This is supported only in
binary upgrade mode.
pg_upgrade will check that all the subscription relations are in 'i'
(init) or in 'r' (ready) state and will error out if that's not the case,
logging the reason for the failure. This helps to avoid the risk of any
dangling slot or origin after the upgrade.
Author: Vignesh C, Julien Rouhaud, Shlok Kyal
Reviewed-by: Peter Smith, Masahiko Sawada, Michael Paquier, Amit Kapila, Hayato Kuroda
Discussion: https://postgr.es/m/
20230217075433.u5mjly4d5cr4hcfe@jrouhaud
Peter Eisentraut [Mon, 1 Jan 2024 18:17:18 +0000 (19:17 +0100)]
Turn AT_PASS_* macros into an enum
This make this code simpler and easier to follow. Also, patches that
want to change the passes won't have to renumber the whole list.
Reviewed-by: Amul Sul <sulamul@gmail.com>
Discussion: https://www.postgresql.org/message-id/flat/CAAJ_b94yyJeGA-5M951_Lr+KfZokOp-2kXicpmEhi5FXhBeTog@mail.gmail.com
Peter Eisentraut [Sun, 31 Dec 2023 14:30:57 +0000 (15:30 +0100)]
Revert "pg_stat_statements: Add coverage for entry_dealloc()"
This reverts commit
742f6b3e6df980d7dafa4a18a165d285483d5f0e.
The new test failed on big-endian platforms.
Discussion: https://www.postgresql.org/message-id/flat/
40d1e4f2-835f-448f-a541-
8ff5db75bf3d@eisentraut.org
Michael Paquier [Sun, 31 Dec 2023 09:06:56 +0000 (18:06 +0900)]
Exclude files generated by generate-wait_event_types.pl from pgindent
The format of these files becomes arguably worse after being indented,
and, as they are generated, there is no point in applying an indentation
anyway.
Author: Bharath Rupireddy
Discussion: https://postgr.es/m/CALj2ACW2JUocmieuR3n9AXL4iSsHcL1LmNkiukuFRUvKNMoiKg@mail.gmail.com
Tomas Vondra [Sat, 30 Dec 2023 21:59:42 +0000 (22:59 +0100)]
Fix parallel BRIN builds with synchronized scans
The brinbuildCallbackParallel callback used by parallel BRIN builds did
not consider that the parallel table scans may be synchronized, starting
from an arbitrary block and then wrap around.
If this happened and the scan actually did wrap around, tuples from the
beginning of the table were added to the last range produced by the same
worker. The index would be missing range at the beginning of the table,
while the last range would be too wide. This would not produce incorrect
query results, but it'd be less efficient.
Fixed by checking for both past and future ranges in the callback. The
worker may produce multiple summaries for the same page range, but the
leader will merge them as if the summaries came from different workers.
Discussion: https://postgr.es/m/
c2ee7d69-ce17-43f2-d1a0-
9811edbda6e6%40enterprisedb.com
Tomas Vondra [Sat, 30 Dec 2023 21:50:54 +0000 (22:50 +0100)]
Minor cleanup of the BRIN parallel build code
Commit
b437571714 added support for parallel builds for BRIN indexes,
using code similar to BTREE parallel builds, and also a new tuplesort
variant. This commit simplifies the new code in two ways:
* The "spool" grouping tuplesort and the heap/index is not necessary.
The heap/index are available as separate arguments, causing confusion.
So remove the spool, and use the tuplesort directly.
* The new tuplesort variant does not need the heap/index, as it sorts
simply by the range block number, without accessing the tuple data.
So simplify that too.
Initial report and patch by Ranier Vilela, further cleanup by me.
Author: Ranier Vilela
Discussion: https://postgr.es/m/CAEudQAqD7f2i4iyEaAz-5o-bf6zXVX-AkNUBm-YjUXEemaEh6A%40mail.gmail.com
Heikki Linnakangas [Sat, 30 Dec 2023 20:18:54 +0000 (22:18 +0200)]
Don't send "cannot connect" errors on invalid startup packet
Commit
16671ba6e7 moved the code that sends "sorry, too many clients
already" and other such messages, but it had the effect that we would
send that error even if the the startup packet processing failed, e.g.
because the client sent an invalid startup packet. That was not
intentional.
Spotted while reading the code again.
Peter Eisentraut [Sat, 30 Dec 2023 18:55:32 +0000 (19:55 +0100)]
pg_stat_statements: Add TAP test for testing restarts
This tests that pg_stat_statement contents are successfully kept
across restart. (This similar to
src/test/recovery/t/029_stats_restart.pl for the stats collector.)
Reviewed-by: Michael Paquier <michael@paquier.xyz>
Reviewed-by: Julien Rouhaud <rjuju123@gmail.com>
Discussion: https://www.postgresql.org/message-id/flat/
40d1e4f2-835f-448f-a541-
8ff5db75bf3d@eisentraut.org
Peter Eisentraut [Sat, 30 Dec 2023 18:55:32 +0000 (19:55 +0100)]
pg_stat_statements: Add coverage for entry_dealloc()
This involves creating more than pg_stat_statements.max entries and
checking that the limit is kept and the least used entries are kicked
out.
Reviewed-by: Michael Paquier <michael@paquier.xyz>
Reviewed-by: Julien Rouhaud <rjuju123@gmail.com>
Discussion: https://www.postgresql.org/message-id/flat/
40d1e4f2-835f-448f-a541-
8ff5db75bf3d@eisentraut.org
Peter Eisentraut [Sat, 30 Dec 2023 10:11:26 +0000 (11:11 +0100)]
Add GUC backtrace_on_internal_error
When enabled (default off), this logs a backtrace anytime elog() or an
equivalent ereport() for internal errors is called.
This is not well covered by the existing backtrace_functions, because
there are many equally-worded low-level errors in many functions. And
if you find out where the error is, then you need to manually rewrite
the elog() to ereport() to attach the errbacktrace(), which is
annoying. Having a backtrace automatically on every elog() call could
be very helpful during development for various kinds of common errors
from palloc, syscache, node support, etc.
Discussion: https://www.postgresql.org/message-id/flat/
ba76c6bc-f03f-4285-bf16-
47759cfcab9e@eisentraut.org
Peter Eisentraut [Fri, 29 Dec 2023 22:54:40 +0000 (23:54 +0100)]
Follow-up fixes for "Make all Perl warnings fatal"
Mostly, we need to check whether $ENV{PG_TEST_EXTRA} is set before
doing regular expression matches against it.
Jeff Davis [Fri, 29 Dec 2023 19:26:10 +0000 (11:26 -0800)]
Fix collate.windows.win1252 test.
Do not rely on the OS recognizing a particular locale; find the right
locale by querying the "en_US" collation.
Author: Alexander Lakhin
Reported-by: Alexander Lakhin
Discussion: https://postgr.es/m/
ae73f6f5-8221-c112-4640-
5cda812a69de@gmail.com
Peter Eisentraut [Fri, 29 Dec 2023 17:01:53 +0000 (18:01 +0100)]
Make all Perl warnings fatal
There are a lot of Perl scripts in the tree, mostly code generation
and TAP tests. Occasionally, these scripts produce warnings. These
are probably always mistakes on the developer side (true positives).
Typical examples are warnings from genbki.pl or related when you make
a mess in the catalog files during development, or warnings from tests
when they massage a config file that looks different on different
hosts, or mistakes during merges (e.g., duplicate subroutine
definitions), or just mistakes that weren't noticed because there is a
lot of output in a verbose build.
This changes all warnings into fatal errors, by replacing
use warnings;
by
use warnings FATAL => 'all';
in all Perl files.
Discussion: https://www.postgresql.org/message-id/flat/
06f899fd-1826-05ab-42d6-
adeb1fd5e200%40eisentraut.org
Tom Lane [Fri, 29 Dec 2023 15:57:11 +0000 (10:57 -0500)]
In pg_dump, don't dump a stats object unless dumping underlying table.
If the underlying table isn't being dumped, it's useless to dump
an extended statistics object; it'll just cause errors at restore.
We have always applied similar policies to, say, indexes.
(When and if we get cross-table stats objects, it might be profitable
to think a little harder about what to do with them. But for now
there seems no point in considering a stats object as anything but
an appendage of its table.)
Rian McGuire and Tom Lane, per report from Rian McGuire.
Back-patch to supported branches.
Discussion: https://postgr.es/m/
7075d3aa-3f05-44a5-b68f-
47dc6a8a0550@buildkite.com
Peter Eisentraut [Thu, 28 Dec 2023 16:25:47 +0000 (17:25 +0100)]
Fix variable name and comment
Should match the name of the related GUC variable.
Discussion: https://www.postgresql.org/message-id/
da4a680a-5d8a-4663-a5c8-
a3ccbf23394a@eisentraut.org
Michael Paquier [Thu, 28 Dec 2023 11:09:12 +0000 (20:09 +0900)]
doc: Mention AttributeRelationId in FDW validator function description
The documentation has been missing one value in the list of catalog OIDs
that can be given to the validator function of a FDW, as of
AttributeRelationId, when changing the attribute options of a foreign
table.
Author: Ian Lawrence Barwick
Discussion: https://postgr.es/m/CAB8KJ=i16t2yJU_Pq2Z+hnNGWFhagp_bJmzxHZu3ZkOjZm-+rQ@mail.gmail.com
Backpatch-through: 12
Tom Lane [Wed, 27 Dec 2023 20:55:46 +0000 (15:55 -0500)]
Improve the implementation of information_schema._pg_expandarray().
This function was originally coded with a handmade expansion
of the array subscripts. We can do it a little faster and far
more legibly today, by using unnest() WITH ORDINALITY.
While at it, let's apply the rowcount estimation support that exists
for the underlying unnest() function: reduce the default ROWS estimate
to 100 and attach array_unnest_support. I'm not sure that
array_unnest_support can do anything useful today with the call sites
that exist in information_schema, but it can't hurt, and the existing
default rowcount of 1000 is surely much too high for any of these
cases.
The psql.sql regression script is using _pg_expandarray() as a
test case for \sf+. While we could keep doing so, the new one-line
function body makes a poor test case for \sf+ row-numbering, so
switch it to print another information_schema function.
Discussion: https://postgr.es/m/
1424303.
1703355485@sss.pgh.pa.us
Tom Lane [Wed, 27 Dec 2023 18:52:01 +0000 (13:52 -0500)]
Doc: specify aclitem syntax more clearly.
The previous wording here relied solely on an example to explain
aclitem output format. Add an actual syntax synopsis and
explanation of the elements to make it clearer.
David Johnston and Tom Lane, per gripe from Eugen Konkov.
Discussion: https://postgr.es/m/
170326116972.
1876499.
18357820037829248593@wrigleys.postgresql.org
Tom Lane [Wed, 27 Dec 2023 18:05:16 +0000 (13:05 -0500)]
Fix another incorrect data type choice from commit
dc2123400.
add_file_to_manifest declared its mtime argument as pg_time_t,
apparently on the principle that copy-and-paste from the backend
is fine. However, the callers are passing struct stat's st_mtime
field which is plain time_t, and add_file_to_manifest itself is
passing the value to gmtime(3) which expects plain time_t,
so the whole thing would not work at all on any platform where
those types are different. Fortunately we can just switch this
variable to time_t.
Per warnings from assorted buildfarm members.
Peter Eisentraut [Wed, 27 Dec 2023 16:39:10 +0000 (17:39 +0100)]
Fix incorrect format placeholders
Peter Eisentraut [Wed, 27 Dec 2023 16:15:26 +0000 (17:15 +0100)]
Fix a warning in Perl test code
The code was passing a scalar argument to node->restart(), but it was
expecting a hash, which causes a warning from Perl ("Odd number of
elements in hash assignment").
But the node->restart() function doesn't take a mode argument anyway.
This was probably copied from an incorrect comment (see commit
750c59d7ec). The default restart mode is already "fast", so the test
should still be semantically correct without explicitly specifying the
mode.
Discussion: https://www.postgresql.org/message-id/
e3f4bf1b-63d3-408a-b07e-
d35a0fdf1b98@eisentraut.org
Tom Lane [Wed, 27 Dec 2023 16:02:53 +0000 (11:02 -0500)]
Fix incorrect data type choices in some read and write calls.
Recently-introduced code in reconstruct.c was using "unsigned"
to store the result of read(), pg_pread(), or write(). This is
completely bogus: it breaks subsequent tests for the result being
negative, as we're being reminded of by a chorus of buildfarm
warnings. Switch to "int" as was doubtless intended. (There are
several other uses of "unsigned" in this file that also look poorly
chosen to me, but for now I'm just trying to clean up the buildfarm.)
A larger problem is that "int" is not necessarily wide enough to hold
the result: per POSIX, all these functions return ssize_t. In places
where the requested read or write length clearly fits in int, that's
academic. It may be academic anyway as long as we constrain
individual data files to 1GB, since even a readv or writev-like
operation would then not be responsible for transferring more than
1GB. Nonetheless it seems like trouble waiting to happen, so I made
a pass over readv and writev calls and fixed the result variables
where that seemed appropriate. We might want to think about changing
some of the fd.c functions to return ssize_t too, for future-proofing;
but I didn't tackle that here.
Discussion: https://postgr.es/m/
1672202.
1703441340@sss.pgh.pa.us
Robert Haas [Wed, 27 Dec 2023 13:41:53 +0000 (08:41 -0500)]
Initialize variable to placate compiler.
I don't think there's a real problem here, because if we reach
the loop over 'tles' then we will either find at least one
TimeLineHistoryEntry such that oldest_segno != 0, in which case
unsummarized_lsn will be initialized, or else unsummarized_tli
will remain 0 and an error will occur before unsummarized_lsn
is used for anything. But some compilers are complainining, as
reported on list by Nathan Bossart and off-list by Andrew Dunstan.
Discussion: http://postgr.es/m/
20231223215147.GA69623@nathanxps13
Alexander Korotkov [Wed, 27 Dec 2023 12:22:02 +0000 (14:22 +0200)]
Improvements and fixes for
e0b1ee17dc
e0b1ee17dc introduced optimization for matching B-tree scan keys required for
the directional scan. However, it incorrectly assumed that all keys required
for opposite direction scan are satisfied by _bt_first(). It has been
illustrated that with multiple scan keys over the same column, a lesser one
(according to the scan direction) could win leaving the other one unsatisfied.
Instead of relying on _bt_first() this commit introduces code that memorizes
whether there was at least one match on the page. If that's true we know that
keys required for opposite-direction scan are satisfied as soon as
corresponding values are not NULLs.
Also, this commit simplifies the description for the optimization of keys
required for the current direction scan. Now the flag used for this is named
continuescanPrechecked and means exactly that *continuescan flag is known
to be true for the last item on the page.
Reported-by: Peter Geoghegan
Discussion: https://postgr.es/m/CAH2-Wzn0LeLcb1PdBnK0xisz8NpHkxRrMr3NWJ%2BKOK-WZ%2BQtTQ%40mail.gmail.com
Reviewed-by: Pavel Borisov
Alexander Korotkov [Wed, 27 Dec 2023 12:21:49 +0000 (14:21 +0200)]
Remove BTScanOpaqueData.firstPage
It's not necessary to keep the firstPage flag as a field of BTScanOpaqueData.
This commit makes it an argument of the _bt_readpage() function. We can easily
distinguish first-time and repeated calls (within the scan) of this function.
Reported-by: Peter Geoghegan
Discussion: https://postgr.es/m/CAH2-Wzk4SOsw%2BtHuTFiz8U9Jqj-R77rYPkhWKODCBb1mdHACXA%40mail.gmail.com
Reviewed-by: Pavel Borisov
Peter Eisentraut [Wed, 27 Dec 2023 09:48:01 +0000 (10:48 +0100)]
pg_stat_statements: Add test coverage for pg_stat_statements_reset_1_7
Run pg_stat_statements_reset() once while the appropriate extension
version is installed.
Reviewed-by: Michael Paquier <michael@paquier.xyz>
Discussion: https://www.postgresql.org/message-id/flat/
40d1e4f2-835f-448f-a541-
8ff5db75bf3d@eisentraut.org
Peter Eisentraut [Wed, 27 Dec 2023 09:48:01 +0000 (10:48 +0100)]
pg_stat_statements: Add test coverage for pg_stat_statements_1_8()
This requires reading pg_stat_statements at least once while the 1.8
version of the extension is installed.
Reviewed-by: Michael Paquier <michael@paquier.xyz>
Discussion: https://www.postgresql.org/message-id/flat/
40d1e4f2-835f-448f-a541-
8ff5db75bf3d@eisentraut.org
John Naylor [Wed, 27 Dec 2023 06:30:12 +0000 (13:30 +0700)]
Fix typo and case in messages
Follow up to
dc2123400
Kyotaro Horiguchi
Discussion: https://postgr.es/m/
20231222.154939.
1509525390095583358.horikyota.ntt@gmail.com
Discussion: https://postgr.es/m/
20231225.145124.
1745560266993421173.horikyota.ntt@gmail.com
Alexander Korotkov [Wed, 27 Dec 2023 01:34:29 +0000 (03:34 +0200)]
Make replace_relid() leave argument unmodified
There are a lot of situations when we share the same pointer to a Bitmapset
structure across different places. In order to evade undesirable side effects
replace_relid() function should always return a copy.
Reported-by: Richard Guo
Discussion: https://postgr.es/m/CAMbWs4_wJthNtYBL%2BSsebpgF-5L2r5zFFk6xYbS0A78GKOTFHw%40mail.gmail.com
Reviewed-by: Richard Guo, Andres Freund, Ashutosh Bapat, Andrei Lepikhov
Alexander Korotkov [Wed, 27 Dec 2023 01:34:23 +0000 (03:34 +0200)]
REALLOCATE_BITMAPSETS manual compile-time option
This option forces each bitmapset modification to reallocate bitmapset. This
is useful for debugging hangling pointers to bitmapset's.
Discussion: https://postgr.es/m/CAMbWs4_wJthNtYBL%2BSsebpgF-5L2r5zFFk6xYbS0A78GKOTFHw%40mail.gmail.com
Reviewed-by: Richard Guo, Andres Freund, Ashutosh Bapat, Andrei Lepikhov
Alexander Korotkov [Wed, 27 Dec 2023 01:34:12 +0000 (03:34 +0200)]
Add asserts to bimapset manipulation functions
New asserts validate that arguments are really bitmapsets. This should help
to early detect accesses to dangling pointers.
Discussion: https://postgr.es/m/CAMbWs4_wJthNtYBL%2BSsebpgF-5L2r5zFFk6xYbS0A78GKOTFHw%40mail.gmail.com
Reviewed-by: Richard Guo, Andres Freund, Ashutosh Bapat, Andrei Lepikhov
Tom Lane [Tue, 26 Dec 2023 22:57:48 +0000 (17:57 -0500)]
Fix failure to verify PGC_[SU_]BACKEND GUCs in pg_file_settings view.
set_config_option() bails out early if it detects that the option to
be set is PGC_BACKEND or PGC_SU_BACKEND class and we're reading the
config file in a postmaster child; we don't want to apply any new
value in such a case. That's fine as far as it goes, but it fails
to consider the requirements of the pg_file_settings view: for that,
we need to check validity of the value even though we have no
intention to apply it. Because we didn't, even very silly values
for affected GUCs would be reported as valid by the view. There
are only half a dozen such GUCs, which perhaps explains why this
got overlooked for so long.
Fix by continuing when changeVal is false; this parallels the logic
in some other early-exit paths.
Also, the check added by commit
924bcf4f1 to prevent GUC changes in
parallel workers seems a few bricks shy of a load: it's evidently
assuming that ereport(elevel, ...) won't return. Make sure we
bail out if it does. The lack of trouble reports suggests that
this is only a latent bug, i.e. parallel workers don't actually
reach here with elevel < ERROR. (Per the code coverage report,
we never reach here at all in the regression suite.) But we clearly
don't want to risk proceeding if that does happen.
Per report from Rıdvan Korkmaz. These are ancient bugs, so back-patch
to all supported branches.
Discussion: https://postgr.es/m/
2089235.
1703617353@sss.pgh.pa.us
Tom Lane [Tue, 26 Dec 2023 22:03:02 +0000 (17:03 -0500)]
Fix mistaken file name in plpython's meson recipe.
Brown-paper-bag bug in commit
58c3151bb. Per buildfarm.
Tom Lane [Tue, 26 Dec 2023 21:16:29 +0000 (16:16 -0500)]
Hide warnings from Python headers when using gcc-compatible compiler.
Like commit
388e80132, use "#pragma GCC system_header" to silence
warnings appearing within the Python headers, since newer Python
versions no longer worry about some restrictions we still use like
-Wdeclaration-after-statement.
This patch improves on
388e80132 by inventing a separate wrapper
header file, allowing the pragma to be tightly scoped to just
the Python headers and not other stuff we have laying about in
plpython.h. I applied the same technique to plperl for the same
reason: the original patch suppressed warnings for a good deal
of our own code, not only the Perl headers.
Like the previous commit, back-patch to supported branches.
Peter Eisentraut and Tom Lane
Discussion: https://postgr.es/m/
ae523163-6d2a-4b81-a875-
832e48dec502@eisentraut.org
Peter Eisentraut [Tue, 26 Dec 2023 20:31:39 +0000 (21:31 +0100)]
Add meson NLS support for pg_combinebackup
Bruce Momjian [Tue, 26 Dec 2023 20:31:50 +0000 (15:31 -0500)]
doc: add ISO 8601 extended format example using to_char()
Reported-by: juha.mustonen@iki.fi
Discussion: https://postgr.es/m/
20170217160154.6101.52806@wrigleys.postgresql.org
Co-authored-by: Erik Wienhold
Backpatch-through: master
Tom Lane [Tue, 26 Dec 2023 19:37:46 +0000 (14:37 -0500)]
Add empty placeholder LINGUAS file for pg_combinebackup.
This will eventually be replaced once some translations exist
for pg_combinebackup's messages. In the meantime, we need
something here to prevent "make" from complaining in
builds with --enable-nls. Per advice added in
88dad06b4.
Peter Eisentraut [Tue, 26 Dec 2023 19:13:11 +0000 (20:13 +0100)]
Remove unused macro
Usage was removed in
6c5576075b but the definition was not removed.
Michael Paquier [Tue, 26 Dec 2023 09:54:36 +0000 (18:54 +0900)]
Fix some translatable strings in pg_basebackup and pg_combinebackup
Two translatable strings introduced in
dc212340058b were split into two
parts, making their translation harder than necessary.
Author: Kyotaro Horiguchi
Discussion: https://postgr.es/m/
20231225.134747.
2287499067164862136.horikyota.ntt@gmail.com
Amit Kapila [Tue, 26 Dec 2023 05:00:42 +0000 (10:30 +0530)]
Doc: Add missing pgoutput options.
We forgot to update the docs while adding new options in pgoutput.
Author: Emre Hasegeli
Reviewed-by: Peter Smith, Amit Kapila
Backpatch-through: 12
Discussion: https://postgr.es/m/CAE2gYzwdwtUbs-tPSV-QBwgTubiyGD2ZGsSnAVsDfAGGLDrGOA%40mail.gmail.com
Tom Lane [Mon, 25 Dec 2023 04:36:33 +0000 (23:36 -0500)]
Fix erroneous -Werror=missing-braces on old GCC.
In the same spirit as
5e0c761d0 and some earlier commits,
suppress a chorus of buildfarm warnings about braces in
these initializers.
Richard Guo
Discussion: https://postgr.es/m/CAMbWs48GzM-Ff7vr=_CeqaXxFBB9UntqtaW1cjU8hOo62AbOOg@mail.gmail.com
Alexander Korotkov [Sun, 24 Dec 2023 23:31:24 +0000 (01:31 +0200)]
Fix a comment for remove_self_joins_recurse()
Discussion: https://postgr.es/m/18187-
831da249cbd2ff8e%40postgresql.org
Author: Richard Guo
Reviewed-by: Andrei Lepikhov
Alexander Korotkov [Sun, 24 Dec 2023 23:24:25 +0000 (01:24 +0200)]
Don't constrain self-join removal due to PHVs
Self-join removal appears to be safe to apply with placeholder variables
as long as we handle PlaceHolderVar in replace_varno_walker() and replace
relid in phinfo->ph_lateral.
Discussion: https://postgr.es/m/18187-
831da249cbd2ff8e%40postgresql.org
Author: Richard Guo
Reviewed-by: Andrei Lepikhov
Alexander Korotkov [Sun, 24 Dec 2023 23:16:09 +0000 (01:16 +0200)]
Handle PlaceHolderVar case in replace_varno_walker
This commit also retires sje_walker. This increases the generalty of replacing
varno in the parse tree and simplifies the code.
Discussion: https://postgr.es/m/18187-
831da249cbd2ff8e%40postgresql.org
Author: Richard Guo
Reviewed-by: Andrei Lepikhov
Alexander Korotkov [Sun, 24 Dec 2023 22:52:42 +0000 (00:52 +0200)]
Enhance checkpointer restartpoint statistics
Bhis commit introduces enhancements to the pg_stat_checkpointer view by adding
three new columns: restartpoints_timed, restartpoints_req, and
restartpoints_done. These additions aim to improve the visibility and
monitoring of restartpoint processes on replicas.
Previously, it was challenging to differentiate between successful and failed
restartpoint requests. This limitation arises because restartpoints on replicas
are dependent on checkpoint records from the primary, and cannot occur more
frequently than these checkpoints.
The new columns allow for clear distinction and tracking of restartpoint
requests, their triggers, and successful completions. This enhancement aids
database administrators and developers in better understanding and diagnosing
issues related to restartpoint behavior, particularly in scenarios where
restartpoint requests may fail.
System catalog is changed. Catversion is bumped.
Discussion: https://postgr.es/m/
99b2ccd1-a77a-962a-0837-
191cdf56c2b9%40inbox.ru
Author: Anton A. Melnikov
Reviewed-by: Kyotaro Horiguchi, Alexander Korotkov
Michael Paquier [Sun, 24 Dec 2023 02:49:14 +0000 (11:49 +0900)]
pgbench: Fix overflow in table populating when rows >= 2^31-1
Using a scale factor large enough so as the number of rows to insert
gets larger than INT32_MAX would cause an infinite loop in
initPopulateTable(), preventing pgbench to finish its initialization.
Oversight in
e35cc3b3f2d0 that has refactored the data generation logic.
Author: John Hsu
Reviewed-by: Tatsuo Ishii, Japin Li
Discussion: https://postgr.es/m/CA+-JvFvHsOafjHcuFPfkyouHNZvbOXhBNhwZxKm3WNgYz9bwzA@mail.gmail.com
Tom Lane [Sat, 23 Dec 2023 16:50:33 +0000 (11:50 -0500)]
Set readline-relevant ENV vars in interactive_psql(), not caller.
Commit
664d75753 pulled 010_tab_completion.pl's infrastructure for
invoking an interactive psql session out into a generally-useful test
function, but it didn't move enough stuff. We need to set up various
environment variables that readline will look at, both to ensure
stability of test results and to prevent test actions from cluttering
the calling user's ~/.psql_history. Expecting calling scripts to
remember to do that is too failure-prone: the other existing caller
001_password.pl did not do it. Hence, remove those initialization
steps from 010_tab_completion.pl and put them into interactive_psql().
Since interactive_psql was already making a local ENV hash, this has
no effect on calling scripts.
Discussion: https://postgr.es/m/794610.
1703182896@sss.pgh.pa.us
Peter Eisentraut [Fri, 22 Dec 2023 20:44:55 +0000 (21:44 +0100)]
Set all variable-length fields of pg_attribute to null on column drop
When a column is dropped, the fields attacl, attoptions, and
attfdwoptions were kept unchanged. This is probably harmless, but it
seems wasteful, and leaves potentially dangling data lying around (for
example, attacl could contain references to users that are later also
dropped).
Change this to set those fields to null when a column is marked as
dropped.
Reviewed-by: Alvaro Herrera <alvherre@alvh.no-ip.org>
Discussion: https://www.postgresql.org/message-id/flat/
249d819d-1763-4580-8110-
0bf91a0f08b7@eisentraut.org
Tom Lane [Fri, 22 Dec 2023 18:32:15 +0000 (13:32 -0500)]
Stop generating plain-text INSTALL instructions.
Up to now, our distribution tarballs have included a plain-text form
of the installation.sgml chapter. The rationale for that was that a
recipient might not have either ready internet access or HTML-viewing
tools; a theory that seems downright quaint today. Maintaining the
ability to generate this file is not without cost, because it puts
special requirements on installation.sgml that are often overlooked.
Moreover, we are moving in the direction of making our distribution
tarballs be pure git snapshots for traceability/reproducibility
reasons; including generated files doesn't fit into that plan.
Hence, let's just drop INSTALL and remove the infrastructure for
generating it. The top-level README will now recommend visiting
our website to see the installation instructions. As a useful
side-effect, we can get rid of README.git which has provoked
confusion.
Discussion: https://postgr.es/m/
20231220114927.faccqqprmuyrzdip@alap3.anarazel.de
Discussion: https://postgr.es/m/
e07408d9-e5f2-d9fd-5672-
f53354e9305e@eisentraut.org
Andrew Dunstan [Fri, 22 Dec 2023 13:56:27 +0000 (13:56 +0000)]
Make win32tzlist.pl checkable again
Commit
1301c80b21 removed some infrastructure needed to check
windows-oriented perl scripts. It also removed most such scripts, but
this one was left over. We repair the damage by making Win32::Registry a
conditional requirement that is only loaded on Windows. With this change
`perl -cw win32tzlist.pl` once again passes on non-Windows machines.
Discussion: https://postgr.es/m/
a2bd77fd-61b8-4c2b-b12e-
3e22ae260f82@eisentraut.org
Jeff Davis [Thu, 21 Dec 2023 23:10:13 +0000 (15:10 -0800)]
Initialize data directories with --lc-messages=C for tests.
Commit
db6d9891e8 changed them to be initialized with --no-locale, but
that reduced the test coverage for non-C locales.
Discussion: https://postgr.es/m/
0d47e5ecc037b3908149aad5f2a987793cf938bd.camel%40j-davis.com
Robert Haas [Thu, 21 Dec 2023 21:03:03 +0000 (16:03 -0500)]
Replace nonsense comment with a relevant one.
Per report from Alexander Lakhin.
Discussion: http://postgr.es/m/
061cccf7-0cac-804f-4c2a-
9d6da8e3848b@gmail.com
Robert Haas [Thu, 21 Dec 2023 20:36:17 +0000 (15:36 -0500)]
Fix numerous typos in incremental backup commits.
Apparently, spell check would have been a really good idea.
Alexander Lakhin, with a few additions as per an off-list report
from Andres Freund.
Discussion: http://postgr.es/m/
f08f7c60-1ad3-0b57-d580-
54b11f07cddf@gmail.com
Tom Lane [Thu, 21 Dec 2023 20:04:00 +0000 (15:04 -0500)]
pg_combinebackup didn't clean its tmp_check directory, either.
Another oversight in
dc2123400, visible when building/testing
in the source directory. (There's a lot of stuff we could
simplify if we stop supporting that case, but for now it's
still mainstream.)
Tom Lane [Thu, 21 Dec 2023 17:43:36 +0000 (12:43 -0500)]
Avoid trying to fetch metapage of an SPGist partitioned index.
This is necessary when spgcanreturn() is invoked on a partitioned
index, and the failure might be reachable in other scenarios as
well. The rest of what spgGetCache() does is perfectly sensible
for a partitioned index, so we should allow it to go through.
I think the main takeaway from this is that we lack sufficient test
coverage for non-btree partitioned indexes. Therefore, I added
simple test cases for brin and gin as well as spgist (hash and
gist AMs were covered already in indexing.sql).
Per bug #18256 from Alexander Lakhin. Although the known test case
only fails since v16 (
3c569049b), I've got no faith at all that there
aren't other ways to reach this problem; so back-patch to all
supported branches.
Discussion: https://postgr.es/m/18256-
0b0e1b6e4a620f1b@postgresql.org
Tom Lane [Thu, 21 Dec 2023 16:50:41 +0000 (11:50 -0500)]
pg_combinebackup's .gitignore file is incomplete.
Oversight in commit
dc2123400, evidently.
Dean Rasheed [Thu, 21 Dec 2023 12:55:22 +0000 (12:55 +0000)]
Fix BEFORE ROW trigger handling in cross-partition MERGE update.
Fix a bug during MERGE if a cross-partition update is attempted on a
partitioned table with a BEFORE DELETE ROW trigger that returns NULL,
to prevent the update. This would cause an error to be thrown, or an
assert failure in an assert-enabled build.
This was an oversight in
9321c79c86, which failed to properly
distinguish a DELETE prevented by a trigger from one prevented by a
concurrent update. Fix by having ExecDelete() return the TM_Result
status to ExecCrossPartitionUpdate(), so that it can distinguish the
two cases, and make ExecCrossPartitionUpdate() return the TM_Result
status to ExecUpdateAct(), so that it can return the correct status
from a concurrent update.
In addition, ensure that the command tag is correctly updated by
having ExecMergeMatched() pass canSetTag to ExecUpdateAct(), rather
than passing false, so that it updates the command tag if it does a
cross-partition update, making this code path in ExecMergeMatched()
consistent with ExecUpdate().
Per bug #18238 from Alexander Lakhin. Back-patch to v15, where MERGE
was introduced.
Dean Rasheed, reviewed by Richard Guo and Jian He.
Discussion: https://postgr.es/m/18238-
2f2bdc7f720180b9%40postgresql.org
Peter Eisentraut [Thu, 21 Dec 2023 10:42:12 +0000 (11:42 +0100)]
Fix prologue of get_partition_ancestors()
The callers of this function assume that the first Oid in the list
returned by this function corresponds to the immediate parent and the
last on corresponds to the topmost parent. Make that explicit in the
function prologue.
Author: Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>
Discussion: https://www.postgresql.org/message-id/CAExHW5vCbATEmht861=G-BFPHNwLUqyeGa_=8-xibJ6Q1UxAeA@mail.gmail.com