Skip to content

[WIP] Sync 14x b13#2546

Open
RekGRpth wants to merge 590 commits into
adb-8.xfrom
sync-14x-b13
Open

[WIP] Sync 14x b13#2546
RekGRpth wants to merge 590 commits into
adb-8.xfrom
sync-14x-b13

Conversation

@RekGRpth

Copy link
Copy Markdown
Member

No description provided.

tglsfdc and others added 30 commits October 19, 2020 19:03
When told to process all databases, clusterdb, reindexdb, and vacuumdb
would reconnect by replacing their --maintenance-db parameter with the
name of the target database.  If that parameter is a connstring (which
has been allowed for a long time, though we failed to document that
before this patch), we'd lose any other options it might specify, for
example SSL or GSS parameters, possibly resulting in failure to connect.
Thus, this is the same bug as commit a45bc8a fixed in pg_dump and
pg_restore.  We can fix it in the same way, by using libpq's rules for
handling multiple "dbname" parameters to add the target database name
separately.  I chose to apply the same refactoring approach as in that
patch, with a struct to handle the command line parameters that need to
be passed through to connectDatabase.  (Maybe someday we can unify the
very similar functions here and in pg_dump/pg_restore.)

Per Peter Eisentraut's comments on bug #16604.  Back-patch to all
supported branches.

Discussion: https://postgr.es/m/16604-933f4b8791227b15@postgresql.org
Change the attribute 'name' to 'slot_name' in pg_stat_replication_slots
view to make it clear and that way we will be consistent with the other
places like pg_stat_wal_receiver view where we display the same attribute.

In the passing, fix the typo in one of the macros in the related code.

Bump the catversion as we have modified the name in the catalog as well.

Reported-by: Noriyoshi Shinoda
Author: Noriyoshi Shinoda
Reviewed-by: Sawada  Masahiko and Amit Kapila
Discussion: https://postgr.es/m/CA+fd4k5_pPAYRTDrO2PbtTOe0eHQpBvuqmCr8ic39uTNmR49Eg@mail.gmail.com
More precisely, correctly handle the ONLY flag indicating not to
recurse.  This was implemented in 86f5759 by recursing in
trigger.c, but that's the wrong place; use ATSimpleRecursion instead,
which behaves properly.  However, because legacy inheritance has never
recursed in that situation, make sure to do that only for new-style
partitioning.

I noticed this problem while testing a fix for another bug in the
vicinity.

This has been wrong all along, so backpatch to 11.

Discussion: https://postgr.es/m/20201016235925.GA29829@alvherre.pgsql
80f8eb7 has added to the normalization quick check headers some code
generated by PerfectHash.pm that is incompatible with the settings of
gitattributes for this repository, as whitespaces followed a set of tabs
for the first element of a line in the table.  Instead of adding a new
exception to gitattributes, rework the format generated so as a right
padding with spaces is used instead of a left padding.  This keeps the
table generated in a readable shape with its set of columns, making
unnecessary an update of gitattributes.

Reported-by: Peter Eisentraut
Author: John Naylor
Discussion: https://postgr.es/m/d601b3b5-a3c7-5457-2f84-3d6513d690fc@2ndquadrant.com
After de8feb1, some warnings remained
that were only visible when using GCC on Windows.  Fix those as well.

Note that the ecpg test source files don't use the full pg_config.h,
so we can't use pg_funcptr_t there but have to do it the long way.
Commit 8dace66 added #ifdefs for a
number of errno symbols because they were not present on Windows.
Later, commit 125ad53 added
replacement #defines for some of those symbols.  So some of the
changes from the first commit are made dead code by the second commit
and can now be removed.

Discussion: https://www.postgresql.org/message-id/flat/6dee8574-b0ad-fc49-9c8c-2edc796f0033@2ndquadrant.com
Theoretically one could go into src/test/thread and build/run this
program there.  In practice, that hasn't worked since 96bf88d,
and probably much longer on some platforms (likely including just
the sort of hoary leftovers where this test might be of interest).
While it wouldn't be too hard to repair the breakage, the fact that
nobody has noticed for two years shows that there is zero usefulness
in maintaining this build pathway.  Let's get rid of it and decree
that thread_test.c is *only* meant to be built/used in configure.

Given that decision, it makes sense to put thread_test.c under config/
and get rid of src/test/thread altogether, so that's what I did.

In passing, update src/test/README, which had been ignored by some
not-so-recent additions of subdirectories.

Discussion: https://postgr.es/m/227659.1603041612@sss.pgh.pa.us
Should cause tests to be a bit faster
psql's \connect claims to be able to re-use previous connection
parameters, but in fact it only re-uses the database name, user name,
host name (and possibly hostaddr, depending on version), and port.
This is problematic for assorted use cases.  Notably, pg_dump[all]
emits "\connect databasename" commands which we would like to have
re-use all other parameters.  If such a script is loaded in a psql run
that initially had "-d connstring" with some non-default parameters,
those other parameters would be lost, potentially causing connection
failure.  (Thus, this is the same kind of bug addressed in commits
a45bc8a and 8e5793a, although the details are much different.)

To fix, redesign do_connect() so that it pulls out all properties
of the old PGconn using PQconninfo(), and then replaces individual
properties in that array.  In the case where we don't wish to re-use
anything, get libpq's default settings using PQconndefaults() and
replace entries in that, so that we don't need different code paths
for the two cases.

This does result in an additional behavioral change for cases where
the original connection parameters allowed multiple hosts, say
"psql -h host1,host2", and the \connect request allows re-use of the
host setting.  Because the previous coding relied on PQhost(), it
would only permit reconnection to the same host originally selected.
Although one can think of scenarios where that's a good thing, there
are others where it is not.  Moreover, that behavior doesn't seem to
meet the principle of least surprise, nor was it documented; nor is
it even clear it was intended, since that coding long pre-dates the
addition of multi-host support to libpq.  Hence, this patch is content
to drop it and re-use the host list as given.

Per Peter Eisentraut's comments on bug #16604.  Back-patch to all
supported branches.

Discussion: https://postgr.es/m/16604-933f4b8791227b15@postgresql.org
There is a handful of places where we called list_delete_ptr() to remove
some element from a List.  In many of these places we know, or with very
little additional effort know the index of the ListCell that we need to
remove.

Here we change all of those places to instead either use one of;
list_delete_nth_cell(), foreach_delete_current() or list_delete_last().
Each of these saves from having to iterate over the list to search for the
element to remove by its pointer value.

There are some small performance gains to be had by doing this, but in the
general case, none of these lists are likely to be very large, so the
lookup was probably never that expensive anyway.  However, some of the
calls are in fairly hot code paths, e.g process_equivalence().  So any
small gains there are useful.

Author: Zhijie Hou and David Rowley
Discussion: https://postgr.es/m/b3517353ec7c4f87aa560678fbb1034b@G08CNEXMBPEKD05.g08.fujitsu.local
Mark Dilger, reviewed by Peter Geoghegan, Andres Freund, Álvaro Herrera,
Michael Paquier, Amul Sul, and by me. Some last-minute cosmetic
revisions by me.

Discussion: http://postgr.es/m/12ED3DA8-25F0-4B68-937D-D907CFBF08E7@enterprisedb.com
The check for whether to complain about not having an old connection
to get parameters from was seriously out of date: it had not been
rethought when we invented connstrings, nor when we invented the
-reuse-previous option.  Replace it with a check that throws an
error if reuse-previous is active and we lack an old connection to
reuse.  While that doesn't move the goalposts very far in terms of
easing reconnection after a server crash, at least it's consistent.

If the user specifies a connstring plus additional parameters
(which is invalid per the documentation), the extra parameters were
silently ignored.  That seems like it could be really confusing,
so let's throw a syntax error instead.

Teach the connstring code path to re-use the old connection's password
in the same cases as the old-style-syntax code path would, ie if we
are reusing parameters and the values of username, host/hostaddr, and
port are not being changed.  Document this behavior, too, since it was
unmentioned before.  Also simplify the implementation a bit, giving
rise to two new and useful properties: if there's a "password=xxx" in
the connstring, we'll use it not ignore it, and by default (i.e.,
except with --no-password) we will prompt for a password if the
re-used password or connstring password doesn't work.  The previous
code just failed if the re-used password didn't work.

Given the paucity of field complaints about these issues, I don't
think that they rise to the level of back-patchable bug fixes,
and in any case they might represent undesirable behavior changes
in minor releases.  So no back-patch.

Discussion: https://postgr.es/m/235210.1603321144@sss.pgh.pa.us
If you write the literal 'abc''def' in an EXEC SQL command, that will
come out the other end as 'abc'def', triggering a syntax error in the
backend.  Likewise, "abc""def" is reduced to "abc"def" which is wrong
syntax for a quoted identifier.

The cause is that the lexer thinks it should emit just one quote
mark, whereas what it really should do is keep the string as-is.

Add some docs and test cases, too.

Although this seems clearly a bug, I fear users wouldn't appreciate
changing it in minor releases.  Some may well be working around it
by applying an extra doubling of affected quotes, as for example
sql/dyntest.pgc has been doing.

Per investigation of a report from 1250kv, although this isn't
exactly what he/she was on about.

Discussion: https://postgr.es/m/673825.1603223178@sss.pgh.pa.us
ECPG's PREPARE ... FROM and EXECUTE IMMEDIATE can optionally take
the target query as a simple literal, rather than the more usual
string-variable reference.  This was previously documented as
being a C string literal, but that's a lie in one critical respect:
you can't write a data double quote as \" in such literals.  That's
because the lexer is in SQL mode at this point, so it'll parse
double-quoted strings as SQL identifiers, within which backslash
is not special, so \" ends the literal.

I looked into making this work as documented, but getting the lexer
to switch behaviors at just the right point is somewhere between
very difficult and impossible.  It's not really worth the trouble,
because these cases are next to useless: if you have a fixed SQL
statement to execute or prepare, you might as well write it as
a direct EXEC SQL, saving the messiness of converting it into
a string literal and gaining the opportunity for compile-time
SQL syntax checking.

Instead, let's just document (and test) the workaround of writing
a double quote as an octal escape (\042) in such cases.

There's no code behavioral change here, so in principle this could
be back-patched, but it's such a niche case I doubt it's worth
the trouble.

Per report from 1250kv.

Discussion: https://postgr.es/m/673825.1603223178@sss.pgh.pa.us
There's no functional change at all here, but I'm curious to see
whether this change successfully shuts up Coverity's warning about
a useless strcmp(), which appeared with the previous update.

Discussion: http://mm.icann.org/pipermail/tz/2020-October/029370.html
DST law changes in Palestine, with a whopping 120 hours' notice.
Also some historical corrections for Palestine.
This replaces the existing binary search with two perfect hash functions
for the composition and the decomposition in the backend code, at the
cost of slightly-larger binaries there (35kB in libpgcommon_srv.a).  Per
the measurements done, this improves the speed of the recomposition and
decomposition by up to 30~40 times for the NFC and NFKC conversions,
while all other operations get at least 40% faster.  This is not as
"good" as what libicu has, but it closes the gap a lot as per the
feedback from Daniel Verite.

The decomposition table remains the same, getting used for the binary
search in the frontend code, where we care more about the size of the
libraries like libpq over performance as this gets involved only in code
paths related to the SCRAM authentication.  In consequence, note that
the perfect hash function for the recomposition needs to use a new
inverse lookup array back to to the existing decomposition table.

The size of all frontend deliverables remains unchanged, even with
--enable-debug, including libpq.

Author: John Naylor
Reviewed-by: Michael Paquier, Tom Lane
Discussion: https://postgr.es/m/CAFBsxsHUuMFCt6-pU+oG-F1==CmEp8wR+O+bRouXWu6i8kXuqA@mail.gmail.com
Thinko in commit 1375422. EvalPlanQualStart() was mistakenly
resetting the parent EState's es_result_relations, when it should
initialize the field in the child EPQ EState it just created.

That was clearly wrong, but it didn't cause any ill effects, because
es_result_relations is currently not used after the ExecInit* phase.

Author: Amit Langote
Discussion: https://www.postgresql.org/message-id/CA%2BHiwqFEuq8AAAmxXsTDVZ1r38cHbfYuiPQx_%3DYyKe2DC-6q4A%40mail.gmail.com
The behavioural change in the -t/--table option happened around 15 years
ago and there seems little point in keeping it around.

Author: Ian Barwick
Discussion: https://www.postgresql.org/message-id/CAB8KJ%3Dh-XALik4M7gv-pX48%3D%2BSPWexfaYwa%2ByTnPwD3DxceXrg%40mail.gmail.com
The order of AuthenticationGSSContinue and AuthenticationSSPI was
swapped, based on the other Authentication* protocol messages being
listed in subcode order.
The ExplainCloseGroup arguments for incremental sort usage data
didn't match the corresponding ExplainOpenGroup.  This only matters
for XML-format output, which is probably why we'd not noticed.

Daniel Gustafsson, per bug #16683 from Frits Jalvingh

Discussion: https://postgr.es/m/16683-8005033324ad34e9@postgresql.org
The tests added by commit 866e24d failed on big-endian machines
due to lack of attention to endianness considerations.  Fix that.

While here, improve a few small cosmetic things, such as running
it through perltidy.

Mark Dilger

Discussion: https://postgr.es/m/30B8E99A-2D9C-48D4-A55C-741C9D5F1563@enterprisedb.com
Instead of immediately PQfinish'ing a dead connection, save it aside
so that we can still extract its parameters for \connect attempts.
(This works because PQconninfo doesn't care whether the PGconn is in
CONNECTION_BAD state.)  This allows developers to reconnect with
just \c after a database crash and restart.

It's tempting to use the same approach instead of closing the old
connection after a failed non-interactive \connect command.  However,
that would not be very safe: consider a script containing
	\c db1 user1 live_server
	\c db2 user2 dead_server
	\c db3
The script would be expecting to connect to db3 at dead_server, but
if we re-use parameters from the first connection then it might
successfully connect to db3 at live_server.  This'd defeat the goal
of not letting a script accidentally execute commands against the
wrong database.

Discussion: https://postgr.es/m/38464.1603394584@sss.pgh.pa.us
verify_heapam() wasn't being careful to sanity-check tuple line
pointers before using them, resulting in SIGBUS on alignment-picky
architectures.  Fix that, add some more test coverage.

Mark Dilger, some tweaking by me

Discussion: https://postgr.es/m/30B8E99A-2D9C-48D4-A55C-741C9D5F1563@enterprisedb.com
This completes both the FORCE and NO FORCE options, NO INHERIT needing a
small adjustment.

Author: Li Japin
Discussion: https://postgr.es/m/15B10F9F-5847-4F5E-BD66-8E25AA473C95@hotmail.com
…on code

genhtml has been generating the following warning with this new code:
WARNING: function data mismatch at /path/src/common/unicode_norm.c:102

HTML coverage reports care about the uniqueness of functions defined in
source files, ignoring any assumptions around CFLAGS.  783f0cc
introduced a duplicated definition of get_code_entry(), leading to a
warning and potentially some incorrect data generated in the reports.
This refactors the code so as the code has only one function
declaration, fixing the warning.

Oversight in 783f0cc.

Reported-by: Tom Lane
Author: Michael Paquier
Reviewed-by: Tom Lane
Discussion: https://postgr.es/m/207789.1603469272@sss.pgh.pa.us
We must not set the "done" flag until after we've executed the
initialization function.  Otherwise, other threads can fall through
the initial unlocked test before initialization is really complete.

This has been seen to cause rare failures of ecpg's thread/descriptor
test, and it could presumably cause other sorts of misbehavior in
threaded ECPG-using applications, since ecpglib relies on
pthread_once() in several places.

Diagnosis and patch by me, based on investigation by Alexander Lakhin.
Back-patch to all supported branches (the bug dates to 2007).

Discussion: https://postgr.es/m/16685-d6cd241872c101d3@postgresql.org
silent-observer and others added 30 commits June 9, 2026 17:06
Commit 41efb83 removed unused subplans
from various plans, update this GPDB-specific test too.
Commit ced138e added a new test to the
test_extensions, while earlier commit
782b169
added a test to the same place.
Commit 540612f added a new row to the DATE_TBL
table. That change results in some queries in the expressions test. Fix the
output of these queries in the optimizer output file.
Commit 489c9c3 changed the way negative
dates are handled, so GPDB-specific test that was relying on this should be
updated as well.
Commit 80d9e51 incorrect fixed test.
Commit ae0f7b1 removed the test from errors.sql
and put it into infinite_recurse.sql
Commit bf797a8 changed generated.sql test.
This patch changes output for the optimizer.
Commit cd6f479 added new column refobjversion
to pg_depend. However, there is a GPDB-specific test that does SELECT * FROM
pg_depend. Since it's the only test doing that, and it doesn't actually need
the output data, just replace it with count(*) to avoid future problems.
…2658)

Commit 3d351d9 changed the possible values of
reltuples column in pg_class. Previously the default value was 0, but after
this commit the default value is -1, meaning "unknown", while 0 indicates an
actually empty table. Adjust GPDB-specific code for ORCA to account for that
change.
Commit 3c99230 added a new test for stats_ext.
Add its output to the optimizer output.
Commit 41efb83 removed unused subplans. Remove in GPDB-specific tests.
Commit 92f8718 in src/backend/executor/nodeSubplan.c added a
conditional error message in the ExecInitSubPlan function, which is
inappropriate for the GPDB query executor.
Commit 76f412a removed factorial operators, leaving only the
factorial() function. Replace in GPDB-specific tests.
…ut (#2676)

1) Commit 2000b6c in src/backend/executor/execMain.c in the
InitResultRelInfo function removed the call to the
RelationGetPartitionQual function. This prevented the AccessShareLock
lock from being acquired on the root partition when working with
partitioned tables (in RelationGetPartitionQual ->
generate_partition_qual). Remove this from the GPDB-specific tests.

2) Commit 3d351d9 redefined pg_class.reltuples to be -1 before the
first VACUUM or ANALYZE. Fix this in the leaf_parts_analyzed function.
1) Commit 4d346de added new tests to
src/test/regress/sql/groupingsets.sql. Adapt them for the GPDB and add
them to the ORCA.

2) Commit d6c08e2 added a new hash_mem_multiplier GUC and changed
work_mem to hash_mem in many places. Explicitly increase
hash_mem_multiplier to preserve plans in a couple of tests.
Commit 3d351d9 redefined pg_class.reltuples
to be -1 before the first VACUUM or ANALYZE. Adapt the output of
GPDB-specific tests previously missed.
#2674)

Commit cd6f479 added the refobjversion column to the pg_depend catalog
table in src/include/catalog/pg_depend.h. Add it to the GPDB-specific
tests.
…#2673)

1) Commit 9fc2122 in src/backend/commands/indexcmds.c changed the error
message in the DefineIndex function. Change this in the GPDB-specific
test outputs.

2) Commit 6b2c4e5 in src/backend/partitioning/partbounds.c changed the
error position display in the check_new_partition_bound function. Add
the error position display in the GPDB-specific test outputs.
Commit dee663f refactored clog fsyncing logic.
Commit c97c117 uses SYNC_HANDLER_CLOG for
distributed clog syncing, which is not valid since distributed clog have their
own directory.
Fix it by adding a separate handler for distributed clog.
#2692)

Commit c5f42da fixed documentation for
HAVING clause, however GPDB has different WINDOW clause for some reason:
it is missing completely in select_into.sgml and it is missing "[, ...]"
in select.sgml. The actual gram.y indicates WINDOW clause is present both
in SELECT and SELECT INTO, and that WINDOW specifications can be repeated,
so resolve in favor of upstream.
Commit f0f13a3 changed the output rows
estimate for UPDATE without RETURNING to 0. Most tests weren't affected,
since single-line EXPLAIN ignores cost diffs anyway. This test seems to be
the only multi-line EXPLAIN in the test suite where these diffs matter.
Commit be9788e added a fast path for
SyncRepWaitForLSN, but it relies on the synchronous_standby_names GUC, which is
always empty on the coordinator.
Fix it by disabling the fast path on the coordinator.
Commit 7b28913 added new TAP test, however
GPDB does not support PREPARE TRANSACTION, so disable that part of the test.
This error is caused by the execution logic of Hash Join Node, when the outer
node does not fetch a tuple, it calls the ExecSquelchNode method let the lower
nodes not to produce tuples anymore, leaving the inner node "squalched" but
"un-executed" state. If the hash join needs to be rescanned, then the inner nodes
has to be rescanned too if Hash Node's lefttree does not have chgParam, and finally
a node does not have chgParam but "squelched" will cause ERROR.

This commit resolves the issue by handling of the rescan method in HashJoin Node properly.

Authored-by: wuyuhao28 <wuyuhao28@github.com>
(cherry picked from commit 73517b3)
…rimary keys" scenario (#2701)

This test uses a postfix operator that is no longer supported.
Fix it by using another operator type.
Commit e03e1e1 incorrectly resolved
conflicts related to dumping indexes, partially reverting changes in
getIndexes() function from commit 257836a
because of refactoring in commit 30ab901.
Adjust these changes to the new code structure.
Commit 5028981 in src/backend/parser/parse_utilcmd.c removed the
inh_indexes field from the CreateStmtContext structure, although it was
used in the transformDistributedBy function in the GPDB. Restore it for
the GPDB and add code to populate it in the transformTableLikeClause
function from 7X.
Commit 5d1833f statrted to use be_tls_* API for SSL information in sslinfo
in extensions functions. It trims expected string produced by
X509_get_subject_name at NAMEDATALEN (64) length. Vanila postgres does not have
tests for sslinfo at all, they were introduced in GPDB. Since the behaviour is documented,
we adjust GPDB tests.
Commit ce90f07 changed error message.
Change ggdb specific tests accordingly.
Commit 257836a added restoring of the collation
versions, but in the ggdb modification of the catalog tables requires enabling
allow_system_table_mods GUC.
…2705)

Commit 76f412a removed factorial operators,
leaving only the factorial() function. Replace in GPDB-specific tests.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.