Tom Lane [Tue, 8 Jun 2021 22:40:06 +0000 (18:40 -0400)]     Force NO SCROLL for plpgsql's implicit cursors.
  Further thought about bug #17050 suggests that it's a good idea
 to use CURSOR_OPT_NO_SCROLL for the implicit cursor opened by
 a plpgsql FOR-over-query loop.  This ensures that, if somebody
 commits inside the loop, PersistHoldablePortal won't try to
 rewind and re-read the cursor.  While we'd have selected NO_SCROLL
 anyway if FOR UPDATE/SHARE appears in the query, there are other
 hazards with volatile functions; and in any case, it's silly to
 expend effort storing rows that we know for certain won't be needed. 
 (While here, improve the comment in exec_run_select, which was a bit
 confused about the rationale for when we can use parallel mode.
 Cursor operations aren't a hazard for nameless portals.) 
 This wasn't an issue until v11, which introduced the possibility
 of persisting such cursors.  Hence, back-patch to v11. 
 Per bug #17050 from Алексей Булгаков. 
 Discussion: https://postgr.es/m/17050-
f77aa827dc85247c@postgresql.org  
  Tom Lane [Tue, 8 Jun 2021 21:50:15 +0000 (17:50 -0400)]     Avoid misbehavior when persisting a non-stable cursor.
  PersistHoldablePortal has long assumed that it should store the
 entire output of the query-to-be-persisted, which requires rewinding
 and re-reading the output.  This is problematic if the query is not
 stable: we might get different row contents, or even a different
 number of rows, which'd confuse the cursor state mightily. 
 In the case where the cursor is NO SCROLL, this is very easy to
 solve: just store the remaining query output, without any rewinding,
 and tweak the portal's cursor state to match.  Aside from removing
 the semantic problem, this could be significantly more efficient
 than storing the whole output. 
 If the cursor is scrollable, there's not much we can do, but it
 was already the case that scrolling a volatile query's result was
 pretty unsafe.  We can just document more clearly that getting
 correct results from that is not guaranteed. 
 There are already prohibitions in place on using SCROLL with
 FOR UPDATE/SHARE, which is one way for a SELECT query to have
 non-stable results.  We could imagine prohibiting SCROLL when
 the query contains volatile functions, but that would be
 expensive to enforce.  Moreover, it could break applications
 that work just fine, if they have functions that are in fact
 stable but the user neglected to mark them so.  So settle for
 documenting the hazard. 
 While this problem has existed in some guise for a long time,
 it got a lot worse in v11, which introduced the possibility
 of persisting plpgsql cursors (perhaps implicit ones) even
 when they violate the rules for what can be marked WITH HOLD.
 Hence, I've chosen to back-patch to v11 but not further. 
 Per bug #17050 from Алексей Булгаков. 
 Discussion: https://postgr.es/m/17050-
f77aa827dc85247c@postgresql.org  
  Bruce Momjian [Tue, 8 Jun 2021 20:47:14 +0000 (16:47 -0400)]     doc:  update release note item about the v2 wire protocol
  Protocol v2 was last used in PG 7.3, not 7.2.  
Reported-by: Tatsuo Ishii Discussion: https://postgr.es/m/
20210608.091329.
906837606658882674.t-ishii@sraoss.co.jp  
  Tomas Vondra [Tue, 8 Jun 2021 18:22:18 +0000 (20:22 +0200)]     Adjust batch size in postgres_fdw to not use too many parameters
 
 The FE/BE protocol identifies parameters with an Int16 index, which
 limits the maximum number of parameters per query to 65535. With
 batching added to postges_fdw this limit is much easier to hit, as
 the whole batch is essentially a single query, making this error much
 easier to hit.
 
 The failures are a bit unpredictable, because it also depends on the
 number of columns in the query. So instead of just failing, this patch
 tweaks the batch_size to not exceed the maximum number of parameters.
 
 Reported-by: Hou Zhijie <houzj.fnst@cn.fujitsu.com>
 Reviewed-by: Bharath Rupireddy <bharath.rupireddyforpostgres@gmail.com>
 Discussion: https://postgr.es/m/OS0PR01MB571603973C0AC2874AD6BF2594299%40OS0PR01MB5716.jpnprd01.prod.outlook.com
 
 
    Tomas Vondra [Tue, 8 Jun 2021 17:24:27 +0000 (19:24 +0200)]     Fix pg_visibility regression failure with CLOBBER_CACHE_ALWAYS
  Commit 
8e03eb92e9 reverted a bit too much code, reintroducing one of the
 issues fixed by 
39b66a91bd - a page might have been left partially empty
 after relcache invalidation.  
Reported-By: Tom Lane Author: Masahiko Sawada
 Discussion: https://postgr.es/m/822752.
1623032114@sss.pgh.pa.us
 Discussion: https://postgr.es/m/CAD21AoA%3D%3Df2VSw3c-Cp_y%3DWLKHMKc1D6s7g3YWsCOvgaYPpJcg%40mail.gmail.com  
  Tom Lane [Tue, 8 Jun 2021 15:59:34 +0000 (11:59 -0400)]     Don't crash on empty statements in SQL-standard function bodies.
  gram.y should discard NULL pointers (empty statements) when
 assembling a routine_body_stmt_list, as it does for other
 sorts of statement lists. 
 Julien Rouhaud and Tom Lane, per report from Noah Misch. 
 Discussion: https://postgr.es/m/
20210606044418.GA297923@rfd.leadboat.com  
  Peter Eisentraut [Tue, 8 Jun 2021 13:37:54 +0000 (15:37 +0200)]     libpq: Fix SNI host handling
  Fix handling of NULL host name (possibly by using hostaddr).  It
 previously crashed.  Also, we should look at connhost, not pghost, to
 handle multi-host specifications. 
 Also remove an unnecessary SSL_CTX_free().  
Reported-by: Jacob Champion <pchampion@vmware.com> Reviewed-by: Michael Paquier <michael@paquier.xyz> Discussion: https://www.postgresql.org/message-id/
504c276ab6eee000bb23d571ea9b0ced4250774e.camel@vmware.com  
  Etsuro Fujita [Tue, 8 Jun 2021 04:45:00 +0000 (13:45 +0900)]     Doc: Further update documentation for asynchronous execution.
  Add a note about asynchronous execution by postgres_fdw when applied to
 Append nodes that contain synchronous subplan(s) as well.  Follow-up for
 commit 
27e1f1456. 
 Andrey Lepikhov and Etsuro Fujita 
 Discussion: https://postgr.es/m/
58fa2aa5-07f5-80b5-59a1-
fec8a349fee7%40postgrespro.ru  
  Michael Paquier [Mon, 7 Jun 2021 23:53:12 +0000 (08:53 +0900)]     Reorder superuser check in pg_log_backend_memory_contexts()
 
 The use of this function is limited to superusers and the code includes
 a hardcoded check for that.  However, the code would look for the PGPROC
 entry to signal for the memory dump before checking if the user is a
 superuser or not, which does not make sense if we know that an error
 will be returned.  Note that the code would let one know if a process
 was a PostgreSQL process or not even for non-authorized users, which is
 not the case now, but this avoids taking ProcArrayLock that will most
 likely finish by being unnecessary.
 
 Thanks to Julien Rouhaud and Tom Lane for the discussion.
 
 Discussion: https://postgr.es/m/YLxw1uVGIAP5uMPl@paquier.xyz
 
 
    Peter Eisentraut [Mon, 7 Jun 2021 19:32:53 +0000 (21:32 +0200)]     Add _outTidRangePath()
 
 We have outNode() coverage for all path nodes, but this one was
 missed when it was added.
 
 
    Tom Lane [Mon, 7 Jun 2021 18:52:42 +0000 (14:52 -0400)]     Stabilize contrib/seg regression test.
  If autovacuum comes along just after we fill table test_seg with
 some data, it will update the stats to the point where we prefer
 a plain indexscan over a bitmap scan, breaking the expected
 output (as well as the point of the test case).  To fix, just
 force a bitmap scan to be chosen here. 
 This has evidently been wrong since commit 
de1d042f5.  It's not
 clear why we just recently saw any buildfarm failures due to it;
 but prairiedog has failed twice on this test in the past week.
 Hence, backpatch to v11 where this test case came in.  
  Tom Lane [Mon, 7 Jun 2021 18:15:25 +0000 (14:15 -0400)]     Fix incautious handling of possibly-miscoded strings in client code.
 
 An incorrectly-encoded multibyte character near the end of a string
 could cause various processing loops to run past the string's
 terminating NUL, with results ranging from no detectable issue to
 a program crash, depending on what happens to be in the following
 memory.
 
 This isn't an issue in the server, because we take care to verify
 the encoding of strings before doing any interesting processing
 on them.  However, that lack of care leaked into client-side code
 which shouldn't assume that anyone has validated the encoding of
 its input.
 
 Although this is certainly a bug worth fixing, the PG security team
 elected not to regard it as a security issue, primarily because
 any untrusted text should be sanitized by PQescapeLiteral or
 the like before being incorporated into a SQL or psql command.
 (If an app fails to do so, the same technique can be used to
 cause SQL injection, with probably much more dire consequences
 than a mere client-program crash.)  Those functions were already
 made proof against this class of problem, cf CVE-2006-2313.
 
 To fix, invent PQmblenBounded() which is like PQmblen() except it
 won't return more than the number of bytes remaining in the string.
 In HEAD we can make this a new libpq function, as PQmblen() is.
 It seems imprudent to change libpq's API in stable branches though,
 so in the back branches define PQmblenBounded as a macro in the files
 that need it.  (Note that just changing PQmblen's behavior would not
 be a good idea; notably, it would completely break the escaping
 functions' defense against this exact problem.  So we just want a
 version for those callers that don't have any better way of handling
 this issue.)
 
 Per private report from houjingyi.  Back-patch to all supported branches.
 
 
    Michael Paquier [Mon, 7 Jun 2021 09:12:29 +0000 (18:12 +0900)]     Fix portability issue in test indirect_toast
 
 When run on a server using default_toast_compression set to LZ4, this
 test would fail because of a consistency issue with the order of the
 tuples treated.  LZ4 causes one tuple to be stored inline instead of
 getting externalized.  As the goal of this test is to check after data
 stored externally, stick to pglz as the compression algorithm used, so
 as all data of this test is stored the way it should.
 
 Analyzed-by: Dilip Kumar
 Discussion: https://postgr.es/m/YLrDWxJgM8WWMoCg@paquier.xyz
 
 
    Amit Kapila [Mon, 7 Jun 2021 04:02:06 +0000 (09:32 +0530)]     Remove two_phase variable from CreateReplicationSlotCmd struct.
  Commit 
19890a064e added the option to enable two_phase commits via
 pg_create_logical_replication_slot but didn't extend the support of same
 in replication protocol. However, by mistake, it added the two_phase
 variable in CreateReplicationSlotCmd which is required only when we extend
 the replication protocol.  
Reported-by: Jeff Davis Author: Ajin Cherian 
Reviewed-by: Amit Kapila Discussion: https://postgr.es/m/
64b9f783c6e125f18f88fbc0c0234e34e71d8639.camel@j-davis.com  
  Etsuro Fujita [Mon, 7 Jun 2021 03:45:00 +0000 (12:45 +0900)]     Fix rescanning of async-aware Append nodes.
  In cases where run-time pruning isn't required, the synchronous and
 asynchronous subplans for an async-aware Append node determined using
 classify_matching_subplans() should be re-used when rescanning the node,
 but the previous code re-determined them using that function repeatedly
 each time when rescanning the node, leading to incorrect results in a
 normal build and an Assert failure in an Assert-enabled build as that
 function doesn't assume that it's called repeatedly in such cases.  Fix
 the code as mentioned above. 
 My oversight in commit 
27e1f1456. 
 While at it, initialize async-related pointers/variables to NULL/zero
 explicitly in ExecInitAppend() and ExecReScanAppend(), just to be sure.
 (The variables would have been set to zero before we get to the latter
 function, but let's do so.)  
Reviewed-by: Kyotaro Horiguchi Discussion: https://postgr.es/m/CAPmGK16Q4B2_KY%2BJH7rb7wQbw54AUprp7TMekGTd2T1B62yysQ%40mail.gmail.com  
  Tom Lane [Sun, 6 Jun 2021 19:46:58 +0000 (15:46 -0400)]     Fix inconsistent equalfuncs.c behavior for FuncCall.funcformat.
  Other equalfuncs.c checks on CoercionForm fields use
 COMPARE_COERCIONFORM_FIELD (which makes them no-ops),
 but commit 
40c24bfef neglected to make _equalFuncCall
 do likewise.  Fix that. 
 This is only strictly correct if FuncCall.funcformat has
 no semantic effect, instead just determining ruleutils.c
 display formatting.  
40c24bfef added a couple of checks
 in parse analysis that could break that rule; but on closer
 inspection, they're redundant, so just take them out again. 
 Per report from Noah Misch. 
 Discussion: https://postgr.es/m/
20210606063331.GC297923@rfd.leadboat.com  
  Tomas Vondra [Sun, 6 Jun 2021 18:52:58 +0000 (20:52 +0200)]     Add transformed flag to nodes/*funcs.c for CREATE STATISTICS
  Commit 
a4d75c86bf added a new flag, tracking if the statement was
 processed by transformStatsStmt(), but failed to add this flag to
 nodes/*funcs.c. 
 Catversion bump, due to adding a flag to copy/equal/out functions.  
Reported-by: Noah Misch Discussion: https://postgr.es/m/
ad7891d2-e90c-b446-9fe2-
7419143847d7%40enterprisedb.com  
  Noah Misch [Sun, 6 Jun 2021 07:08:21 +0000 (00:08 -0700)]     Standardize nodes/*funcs.c cosmetics for ForeignScan.resultRelation.
 
 catversion bump due to readfuncs.c field order change.
 
 
    Peter Eisentraut [Sat, 5 Jun 2021 07:08:40 +0000 (09:08 +0200)]     doc: Simplify COMMENT and SECURITY LABEL documentation
  Just say that objects that reside in schemas can be schema-qualified.
 Don't list all possible such objects.  The existing lists weren't
 complete anyway. 
 Discussion: https://www.postgresql.org/message-id/flat/
b2ec2234-67fe-d861-5cea-
f526cd18c086%40enterprisedb.com  
  Peter Eisentraut [Sat, 5 Jun 2021 07:01:29 +0000 (09:01 +0200)]     doc: Make terminology in glossary consistent
  Use "reside in" rather than "belong to" for objects in a schema.
 Previous use was a mix of the two. 
 Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
 Discussion: https://www.postgresql.org/message-id/
202106021932.idmbjjaqk7ke@alvherre.pgsql  
  Peter Eisentraut [Sat, 5 Jun 2021 05:57:31 +0000 (07:57 +0200)]     gitattributes: Add new entry to silence whitespace error
 
 
    Peter Eisentraut [Sat, 5 Jun 2021 05:16:34 +0000 (07:16 +0200)]     Fix subtransaction test for Python 3.10
  Starting with Python 3.10, the stacktrace looks differently:
   -  PL/Python function "subtransaction_exit_subtransaction_in_with", line 3, in <module>
   -    s.__exit__(None, None, None)
   +  PL/Python function "subtransaction_exit_subtransaction_in_with", line 2, in <module>
   +    with plpy.subtransaction() as s:
 Using try/except specifically makes the error look always the same. 
 (See https://github.com/python/cpython/pull/25719 for the discussion
 of this change in Python.) 
 Author: Honza Horak <hhorak@redhat.com>
 Discussion: https://www.postgresql.org/message-id/flat/853083.
1620749597%40sss.pgh.pa.us
 RHBZ: https://bugzilla.redhat.com/show_bug.cgi?id=
1959080    Tom Lane [Sat, 5 Jun 2021 00:07:08 +0000 (20:07 -0400)]     Fix postgres_fdw failure with whole-row Vars of type RECORD.
  Commit 
86dc90056 expects that FDWs can cope with whole-row Vars for
 their tables, even if the Vars are marked with vartype RECORDOID.
 Previously, whole-row Vars generated by the planner had vartype equal
 to the relevant table's rowtype OID.  (The point behind this change is
 to enable sharing of resjunk columns across inheritance child tables.) 
 It turns out that postgres_fdw fails to cope with this, though through
 bad fortune none of its test cases exposed that.  Things mostly work,
 but when we try to read back a value of such a Var, the expected
 rowtype is not available to record_in().  Fortunately, it's not
 difficult to hack up the tupdesc that controls this process to
 substitute the foreign table's rowtype for RECORDOID.  Thus we can
 solve the runtime problem while still sharing the resjunk column
 with other tables. 
 Per report from Alexander Pyhalov. 
 Discussion: https://postgr.es/m/
7817fb9ebd6661cdf9b67dec6e129a78@postgrespro.ru  
  David Rowley [Fri, 4 Jun 2021 11:39:40 +0000 (23:39 +1200)]     Doc: Fix some spelling mistakes
  Author: Daniel Gustafsson
 Discussion: https://postgr.es/m/
7838B8EE-CFD6-48D7-AE2D-
520D69FD84BD@yesql.se  
  David Rowley [Fri, 4 Jun 2021 10:42:17 +0000 (22:42 +1200)]     Clean up some questionable usages of DatumGet* macros
 
 This tidies up some questionable coding which made use of
 DatumGetPointer() for Datums being passed into functions where the
 parameter is expected to be a cstring.  We saw no compiler warnings with
 the old code as the Pointer type used in DatumGetPointer() happens to
 be a char * rather than a void *.  However, that's no excuse and we should
 be using the correct macro for the job.
 
 Here we also make use of OutputFunctionCall() rather than using
 FunctionCall1() directly to call the type's output function.
 OutputFunctionCall() is the standard way to do this.  It casts the
 returned value to a cstring for us.
 
 In passing get rid of a duplicate call to strlen().  Most compilers will
 likely optimize away the 2nd call, but there may be some that won't.  In
 any case, this just aligns the code to some other nearby code that already
 does this.
 
 Discussion: https://postgr.es/m/CAApHDvq1D=ehZ8hey8Hz67N+_Zth0GHO5wiVCfv1YcGPMXJq0A@mail.gmail.com
 
 
    Tom Lane [Fri, 4 Jun 2021 01:07:12 +0000 (21:07 -0400)]     Doc: fix bogus intarray index example.
  The siglen parameter is provided by gist__intbig_ops not
 gist__int_ops. 
 Simon Norris 
 Discussion: https://postgr.es/m/
11BF2AA9-17AE-432A-AFE1-
584FB9FB079D@hillcrestgeo.ca  
  Michael Paquier [Fri, 4 Jun 2021 00:46:15 +0000 (09:46 +0900)]     doc: Add description for PGSSLCRLDIR
  This was missing in the section dedicated to the supported environment
 variables of libpq.  Oversight in 
f5465fa.  
Reviewed-by: Daniel Gustafsson, Kyotaro Horiguchi Discussion: https://postgr.es/m/YLhI0mLoRkY3u4Wj@paquier.xyz  
  Michael Paquier [Fri, 4 Jun 2021 00:33:14 +0000 (09:33 +0900)]     doc: Fix link reference for PGSSLMAXPROTOCOLVERSION
  The link was pointing to the minimum protocol version.  Incorrect as of 
ff8ca5f. 
 Author: Daniel Gustafsson
 Discussion: https://postgr.es/m/
F893F184-C645-4C21-A2BA-
583441B7288F@yesql.se
 Backpatch-through: 13  
  David Rowley [Fri, 4 Jun 2021 00:19:50 +0000 (12:19 +1200)]     Adjust locations which have an incorrect copyright year
  A few patches committed after 
ca3b37487 mistakenly forgot to make the
 copyright year 2021.  Fix these. 
 Discussion: https://postgr.es/m/CAApHDvqyLmd9P2oBQYJ=DbrV8QwyPRdmXtCTFYPE08h+ip0UJw@mail.gmail.com  
  Andrew Dunstan [Thu, 3 Jun 2021 20:08:33 +0000 (16:08 -0400)]     In PostgresNode.pm, don't pass SQL to psql on the command line
 
 The Msys shell mangles certain patterns in its command line, so avoid
 handing arbitrary SQL to psql on the command line and instead use
 IPC::Run's redirection facility for stdin. This pattern is already
 mostly whats used, but query_poll_until() was not doing the right thing.
 
 Problem discovered on the buildfarm when a new TAP test failed on msys.
 
 
    Tom Lane [Thu, 3 Jun 2021 18:54:06 +0000 (14:54 -0400)]     Fix incorrect permissions on pg_subscription.
  The documented intent is for all columns except subconninfo to be
 publicly readable.  However, this has been overlooked twice.
 subsynccommit has never been readable since it was introduced,
 nor has the oid column (which is important for joining). 
 Given the lack of previous complaints, it's not clear that it's
 worth doing anything about this in the back branches.  But there's
 still time to fix it inexpensively for v14. 
 Per report from Israel Barth (via Euler Taveira). 
 Patch by Euler Taveira, possibly-vain comment updates by me. 
 Discussion: https://postgr.es/m/
b8f7c17c-0041-46b6-acfe-
2d1f5a985ab4@www.fastmail.com  
  Michael Paquier [Thu, 3 Jun 2021 06:28:24 +0000 (15:28 +0900)]     Reduce risks of conflicts in internal queries of REFRESH MATVIEW CONCURRENTLY
  The internal SQL queries used by REFRESH MATERIALIZED VIEW CONCURRENTLY
 include some aliases for its diff and temporary relations with
 rather-generic names: diff, newdata, newdata2 and mv.  Depending on the
 queries used for the materialized view, using CONCURRENTLY could lead to
 some internal failures if the matview query and those internal aliases
 conflict. 
 Those names have been chosen in 
841c29c8.  This commit switches instead
 to a naming pattern which is less likely going to cause conflicts, based
 on an idea from Thomas Munro, by appending _$ to those aliases.  This is
 not perfect as those new names could still conflict, but at least it has
 the advantage to keep the code readable and simple while reducing the
 likelihood of conflicts to be close to zero.  
Reported-by: Mathis Rudolf Author: Bharath Rupireddy 
Reviewed-by: Bernd Helmle, Thomas Munro, Michael Paquier Discussion: https://postgr.es/m/
109c267a-10d2-3c53-b60e-
720fcf44d9e8@credativ.de
 Backpatch-through: 9.6  
  Peter Eisentraut [Thu, 3 Jun 2021 04:55:04 +0000 (06:55 +0200)]     doc: Group options in pg_amcheck reference page
 
 The previous arrangement was just one big list, and the internal order
 was not all consistent either.  Now arrange the options by group and
 sort them, the way it's already done in the --help output and one
 other reference pages.  Also fix some ordering in the --help output.
 
 
    David Rowley [Thu, 3 Jun 2021 04:38:03 +0000 (16:38 +1200)]     Standardize usages of appendStringInfo and appendPQExpBuffer
 
 Fix a few places that were using appendStringInfo() when they should have
 been using appendStringInfoString().  Also some cases of
 appendPQExpBuffer() that would have been better suited to use
 appendPQExpBufferChar(), and finally, some places that used
 appendPQExpBuffer() when appendPQExpBufferStr() would have suited better.
 
 There are no bugs are being fixed here.  The aim is just to make the code
 use the most optimal function for the job.
 
 All the code being changed here is new to PG14.  It makes sense to fix
 these before we branch for PG15.  There are a few other places that we
 could fix, but those cases are older code so fixing those seems less
 worthwhile as it may cause unnecessary back-patching pain in the future.
 
 Author: Hou Zhijie
 Discussion: https://postgr.es/m/OS0PR01MB5716732158B1C4142C6FE375943D9@OS0PR01MB5716.jpnprd01.prod.outlook.com
 
 
    Michael Paquier [Thu, 3 Jun 2021 02:50:56 +0000 (11:50 +0900)]     Ignore more environment variables in TAP tests
 
 Various environment variables were not getting reset in the TAP tests,
 which would cause failures depending on the tests or the environment
 variables involved.  For example, PGSSL{MAX,MIN}PROTOCOLVERSION could
 cause failures in the SSL tests.  Even worse, a junk value of
 PGCLIENTENCODING makes a server startup fail.  The list of variables
 reset is adjusted in each stable branch depending on what is supported.
 
 While on it, simplify a bit the code per a suggestion from Andrew
 Dunstan, using a list of variables instead of doing single deletions.
 
 Reviewed-by: Andrew Dunstan, Daniel Gustafsson
 Discussion: https://postgr.es/m/YLbjjRpucIeZ78VQ@paquier.xyz
 Backpatch-through: 9.6
 
 
    Tom Lane [Wed, 2 Jun 2021 22:50:15 +0000 (18:50 -0400)]     Re-allow custom GUC names that have more than two components.
  Commit 
3db826bd5 disallowed this case, but it turns out that some
 people are depending on it.  Since the core grammar has allowed
 it since 
3dc37cd8d, it seems like this code should fall in line. 
 Per bug #17045 from Robert Sosinski. 
 Discussion: https://postgr.es/m/17045-
6a4a9f0d1513f72b@postgresql.org  
  Tomas Vondra [Wed, 2 Jun 2021 22:06:42 +0000 (00:06 +0200)]     Revert most of 
39b66a91bd  Reverts most of commit 
39b66a91bd, which was found to cause significant
 regression for REFRESH MATERIALIZED VIEW. This means only rows inserted
 by heap_multi_insert will benefit from the optimization, implemented in
 commit 
7db0cd2145.  
Reported-by: Masahiko Sawada Discussion: https://postgr.es/m/CAD21AoA%3D%3Df2VSw3c-Cp_y%3DWLKHMKc1D6s7g3YWsCOvgaYPpJcg%40mail.gmail.com  
  Tom Lane [Wed, 2 Jun 2021 18:38:14 +0000 (14:38 -0400)]     Fix planner's row-mark code for inheritance from a foreign table.
  Commit 
428b260f8 broke planning of cases where row marks are needed
 (SELECT FOR UPDATE, etc) and one of the query's tables is a foreign
 table that has regular table(s) as inheritance children.  We got the
 reverse case right, but apparently were thinking that foreign tables
 couldn't be inheritance parents.  Not so; so we need to be able to
 add a CTID junk column while adding a new child, not only a wholerow
 junk column. 
 Back-patch to v12 where the faulty code came in. 
 Amit Langote 
 Discussion: https://postgr.es/m/CA+HiwqEmo3FV1LAQ4TVyS2h1WM=kMkZUmbNuZSCnfHvMcUcPeA@mail.gmail.com  
  Tom Lane [Wed, 2 Jun 2021 15:52:35 +0000 (11:52 -0400)]     Update plannodes.h's comments about PlanRowMark.
  The reference here to different physical column numbers in inherited
 UPDATE/DELETE plans is obsolete as of 
86dc90056; remove it.  Also
 rework the text about inheritance cases to make it clearer.  
  Tom Lane [Wed, 2 Jun 2021 14:44:16 +0000 (10:44 -0400)]     Teach tab-complete.c about recently-added CREATE TYPE options.
  Commit 
c7aba7c14 missed adding SUBSCRIPT here,
 and commit 
6df7a9698 missed adding MULTIRANGE_TYPE_NAME. 
 Haiying Tang and Tom Lane 
 Discussion: https://postgr.es/m/OS0PR01MB6113F9EDA46FA53BAA5445BDFB3D9@OS0PR01MB6113.jpnprd01.prod.outlook.com  
  Fujii Masao [Wed, 2 Jun 2021 03:20:15 +0000 (12:20 +0900)]     Remove unnecessary use of Time::HiRes from 013_crash_restart.pl.
  The regression test 013_crash_restart.pl included "use Time::HiRes qw(usleep)",
 but the usleep was not used there. 
 Author: Fujii Masao 
Reviewed-by: Kyotaro Horiguchi Discussion: https://postgr.es/m/
63ad1368-18e2-8900-8443-
524bdfb1bef5@oss.nttdata.com  
  Fujii Masao [Wed, 2 Jun 2021 03:19:39 +0000 (12:19 +0900)]     Add regression test for recovery pause.
 
 Previously there was no regression test for recovery pause feature.
 This commit adds the test that checks
 
 - recovery can be paused or resumed expectedly
 - pg_get_wal_replay_pause_state() reports the correct pause state
 - the paused state ends and promotion continues if a promotion
    is triggered while recovery is paused
 
 Suggested-by: Michael Paquier
 Author: Fujii Masao
 Reviewed-by: Kyotaro Horiguchi, Dilip Kumar
 Discussion: https://postgr.es/m/YKNirzqM1HYyk5h4@paquier.xyz
 
 
    Noah Misch [Wed, 2 Jun 2021 01:04:15 +0000 (18:04 -0700)]     Add Windows file version information to libpq_pipeline.exe.
 
 
    Noah Misch [Wed, 2 Jun 2021 01:04:14 +0000 (18:04 -0700)]     Fix missing gettimeofday() declaration.
 
 This avoids a warning under MinGW versions having gettimeofday(), per
 buildfarm member walleye.
 
 
    Tom Lane [Tue, 1 Jun 2021 15:12:56 +0000 (11:12 -0400)]     Reject SELECT ... GROUP BY GROUPING SETS (()) FOR UPDATE.
 
 This case should be disallowed, just as FOR UPDATE with a plain
 GROUP BY is disallowed; FOR UPDATE only makes sense when each row
 of the query result can be identified with a single table row.
 However, we missed teaching CheckSelectLocking() to check
 groupingSets as well as groupClause, so that it would allow
 degenerate grouping sets.  That resulted in a bad plan and
 a null-pointer dereference in the executor.
 
 Looking around for other instances of the same bug, the only one
 I found was in examine_simple_variable().  That'd just lead to
 silly estimates, but it should be fixed too.
 
 Per private report from Yaoguang Chen.
 Back-patch to all supported branches.
 
 
    Amit Kapila [Tue, 1 Jun 2021 08:44:02 +0000 (14:14 +0530)]     pgoutput: Fix memory leak due to RelationSyncEntry.map.
 
 Release memory allocated when creating the tuple-conversion map and its
 component TupleDescs when its owning sync entry is invalidated.
 TupleDescs must also be freed when no map is deemed necessary, to begin
 with.
 
 Reported-by: Andres Freund
 Author: Amit Langote
 Reviewed-by: Takamichi Osumi, Amit Kapila
 Backpatch-through: 13, where it was introduced
 Discussion: https://postgr.es/m/MEYP282MB166933B1AB02B4FE56E82453B64D9@MEYP282MB1669.AUSP282.PROD.OUTLOOK.COM
 
 
    Thomas Munro [Mon, 31 May 2021 23:22:22 +0000 (11:22 +1200)]     Fix error handling in replacement pthread_barrier_init().
  Commit 
44bf3d50 incorrectly used an errno-style interface when supplying
 missing pthread functionality (i.e. on macOS), but it should check for
 and return error numbers directly.  
  Peter Eisentraut [Mon, 31 May 2021 16:32:41 +0000 (18:32 +0200)]     Fix RADIUS error reporting in hba file parsing
  The RADIUS-related checks in parse_hba_line() did not respect elevel
 and did not fill in *err_msg.  Also, verify_option_list_length()
 pasted together error messages in an untranslatable way.  To fix the
 latter, remove the function and do the error checking inline.  It's a
 bit more verbose but only minimally longer, and it makes fixing the
 first two issues straightforward.  
Reviewed-by: Magnus Hagander <magnus@hagander.net> Discussion: https://www.postgresql.org/message-id/flat/
8381e425-8c23-99b3-15ec-
3115001db1b2%40enterprisedb.com  
  Tom Lane [Mon, 31 May 2021 16:03:00 +0000 (12:03 -0400)]     Fix mis-planning of repeated application of a projection.
  create_projection_plan contains a hidden assumption (here made
 explicit by an Assert) that a projection-capable Path will yield a
 projection-capable Plan.  Unfortunately, that assumption is violated
 only a few lines away, by create_projection_plan itself.  This means
 that two stacked ProjectionPaths can yield an outcome where we try to
 jam the upper path's tlist into a non-projection-capable child node,
 resulting in an invalid plan. 
 There isn't any good reason to have stacked ProjectionPaths; indeed the
 whole concept is faulty, since the set of Vars/Aggs/etc needed by the
 upper one wouldn't necessarily be available in the output of the lower
 one, nor could the lower one create such values if they weren't
 available from its input.  Hence, we can fix this by adjusting
 create_projection_path to strip any top-level ProjectionPath from the
 subpath it's given.  (This amounts to saying "oh, we changed our
 minds about what we need to project here".) 
 The test case added here only fails in v13 and HEAD; before that, we
 don't attempt to shove the Sort into the parallel part of the plan,
 for reasons that aren't entirely clear to me.  However, all the
 directly-related code looks generally the same as far back as v11,
 where the hazard was introduced (by 
d7c19e62a).  So I've got no faith
 that the same type of bug doesn't exist in v11 and v12, given the
 right test case.  Hence, back-patch the code changes, but not the
 irrelevant test case, into those branches. 
 Per report from Bas Poot. 
 Discussion: https://postgr.es/m/
534fca83789c4a378c7de379e9067d4f@politie.nl  
  Noah Misch [Mon, 31 May 2021 07:29:58 +0000 (00:29 -0700)]     Raise a timeout to 180s, in test 010_logical_decoding_timelines.pl.
 
 Per buildfarm member hornet.  Also, update Pod documentation showing the
 lower value.  Back-patch to v10, where the test first appeared.
 
 
    Michael Paquier [Mon, 31 May 2021 02:35:00 +0000 (11:35 +0900)]     Improve some error wording with multirange type parsing
  Braces were referred in some error messages as only brackets (not curly
 brackets or curly braces), which can be confusing as other types of
 brackets could be used. 
 While on it, add one test to check after the case of junk characters
 detected after a right brace. 
 Author: Kyotaro Horiguchi
 Discussion: https://postgr.es/m/
20210514.153153.
1814935914483287479.horikyota.ntt@gmail.com  
  Tom Lane [Sat, 29 May 2021 18:27:37 +0000 (14:27 -0400)]     Doc: improve libpq service-file docs, avoid overspecifying pathnames.
  Clarify libpq.sgml's description of service file locations and
 semantics.  Avoid use of backtick'ed pg_config calls to describe
 paths; that doesn't work on Windows, and even on Unix it's an
 idiom that not all readers may be instantly familiar with. 
 Don't overspecify the locations of include files, instead writing
 only as much as you'd use in #include directives.  The previous text
 in these places was incorrect for some installations, depending on
 where "postgresql" is in the install path. 
 Our convention for referencing the user's home directory seems
 to be "~", so change the one place that spelled it "$HOME". 
 install-windows.sgml follows the platform convention of spelling
 file paths with "\", so change the one place that used "/". 
 Haiying Tang and Tom Lane 
 Discussion: https://postgr.es/m/
162149020918.26174.
7150424047314144297@wrigleys.postgresql.org  
  Thomas Munro [Sat, 29 May 2021 02:48:15 +0000 (14:48 +1200)]     Fix race condition when sharing tuple descriptors.
  Parallel query processes that called BlessTupleDesc() for identical
 tuple descriptors at the same moment could crash.  There was code to
 handle that rare case, but it dereferenced a bogus DSA pointer.  Repair. 
 Back-patch to 11, where commit 
cc5f8136 added support for sharing tuple
 descriptors in parallel queries.  
Reported-by: Eric Thinnes <e.thinnes@gmx.de> Discussion: https://postgr.es/m/
99aaa2eb-e194-bf07-c29a-
1a76b4f2bcf9%40gmx.de  
  Andrew Dunstan [Fri, 28 May 2021 13:35:11 +0000 (09:35 -0400)]     fix syntax error
 
 
    Andrew Dunstan [Fri, 28 May 2021 13:26:30 +0000 (09:26 -0400)]     Report configured port in MSVC built pg_config
 
 This is a long standing omission, discovered when trying to write code
 that relied on it.
 
 Backpatch to all live branches.
 
 
    Peter Geoghegan [Fri, 28 May 2021 00:09:16 +0000 (17:09 -0700)]     Fix VACUUM VERBOSE's LP_DEAD item pages output.
  Oversight in commit 
5100010e.  
  Tom Lane [Thu, 27 May 2021 19:55:08 +0000 (15:55 -0400)]     Reduce the range of OIDs reserved for genbki.pl.
  Commit 
ab596105b increased FirstBootstrapObjectId from 12000 to 13000,
 but we've had some push-back about that.  It's worrisome to reduce the
 daylight between there and FirstNormalObjectId, because the number of
 OIDs consumed during initdb for collation objects is hard to predict. 
 We can improve the situation by abandoning the assumption that these
 OIDs must be globally unique.  It should be sufficient for them to be
 unique per-catalog.  (Any code that's unhappy about that is broken
 anyway, since no more than per-catalog uniqueness can be guaranteed
 once the OID counter wraps around.)  With that change, the largest OID
 assigned during genbki.pl (starting from a base of 10000) is a bit
 under 11000.  This allows reverting FirstBootstrapObjectId to 12000
 with reasonable confidence that that will be sufficient for many years
 to come. 
 We are not, at this time, abandoning the expectation that
 hand-assigned OIDs (below 10000) are globally unique.  Someday that'll
 likely be necessary, but the need seems years away still. 
 This is late for v14, but it seems worth doing it now so that
 downstream software doesn't have to deal with the consequences of
 a change in FirstBootstrapObjectId.  In any case, we already
 bought into forcing an initdb for beta2, so another catversion
 bump won't hurt. 
 Discussion: https://postgr.es/m/
1665197.
1622065382@sss.pgh.pa.us  
  Tom Lane [Thu, 27 May 2021 17:24:24 +0000 (13:24 -0400)]     Rethink definition of pg_attribute.attcompression.
  Redefine '\0' (InvalidCompressionMethod) as meaning "if we need to
 compress, use the current setting of default_toast_compression".
 This allows '\0' to be a suitable default choice regardless of
 datatype, greatly simplifying code paths that initialize tupledescs
 and the like.  It seems like a more user-friendly approach as well,
 because now the default compression choice doesn't migrate into table
 definitions, meaning that changing default_toast_compression is
 usually sufficient to flip an installation's behavior; one needn't
 tediously issue per-column ALTER SET COMPRESSION commands. 
 Along the way, fix a few minor bugs and documentation issues
 with the per-column-compression feature.  Adopt more robust
 APIs for SetIndexStorageProperties and GetAttributeCompression. 
 Bump catversion because typical contents of attcompression will now
 be different.  We could get away without doing that, but it seems
 better to ensure v14 installations all agree on this.  (We already
 forced initdb for beta2, anyway.) 
 Discussion: https://postgr.es/m/626613.
1621787110@sss.pgh.pa.us  
  Peter Eisentraut [Thu, 27 May 2021 14:40:52 +0000 (16:40 +0200)]     Fix vpath build in libpq_pipeline test
  The path needs to be set to refer to the build directory, not the
 current directory, because that's actually the source directory at
 that point. 
 fix for 
6abc8c2596dbfcb24f9b4d954a1465b8015118c3    Peter Eisentraut [Thu, 27 May 2021 11:58:13 +0000 (13:58 +0200)]     Add NO_INSTALL option to pgxs
  Apply in libpq_pipeline test makefile, so that the test file is not
 installed into tmp_install.  
Reviewed-by: Alvaro Herrera <alvherre@alvh.no-ip.org> Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us> Discussion: https://www.postgresql.org/message-id/flat/
cb9d16a6-760f-cd44-28d6-
b091d5fb6ca7%40enterprisedb.com  
  Michael Paquier [Thu, 27 May 2021 11:11:00 +0000 (20:11 +0900)]     Fix MSVC scripts when building with GSSAPI/Kerberos
  The deliverables of upstream Kerberos on Windows are installed with
 paths that do not match our MSVC scripts.  First, the include folder was
 named "inc/" in our scripts, but the upstream MSIs use "include/".
 Second, the build would fail with 64-bit environments as the libraries
 are named differently. 
 This commit adjusts the MSVC scripts to be compatible with the latest
 installations of upstream, and I have checked that the compilation was
 able to work with the 32-bit and 64-bit installations. 
 Special thanks to Kondo Yuta for the help in investigating the situation
 in hamerkop, which had an incorrect configuration for the GSS
 compilation.  
Reported-by: Brian Ye Discussion: https://postgr.es/m/
162128202219.27274.
12616756784952017465@wrigleys.postgresql.org
 Backpatch-through: 9.6  
  Peter Eisentraut [Thu, 27 May 2021 07:52:12 +0000 (09:52 +0200)]     Replace run-time error check with assertion
  The error message was checking that the structures returned from the
 parser matched expectations.  That's something we usually use
 assertions for, not a full user-facing error message.  So replace that
 with an assertion (hidden inside lfirst_node()).  
Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us> Discussion: https://www.postgresql.org/message-id/flat/
452e9df8-ec89-e01b-b64a-
8cc6ce830458%40enterprisedb.com  
  Michael Paquier [Thu, 27 May 2021 05:57:28 +0000 (14:57 +0900)]     doc: Fix description of some GUCs in docs and postgresql.conf.sample
 
 The following parameters have been imprecise, or incorrect, about their
 description (PGC_POSTMASTER or PGC_SIGHUP):
 - autovacuum_work_mem (docs, as of 9.6~)
 - huge_page_size (docs, as of 14~)
 - max_logical_replication_workers (docs, as of 10~)
 - max_sync_workers_per_subscription (docs, as of 10~)
 - min_dynamic_shared_memory (docs, as of 14~)
 - recovery_init_sync_method (postgresql.conf.sample, as of 14~)
 - remove_temp_files_after_crash (docs, as of 14~)
 - restart_after_crash (docs, as of 9.6~)
 - ssl_min_protocol_version (docs, as of 12~)
 - ssl_max_protocol_version (docs, as of 12~)
 
 This commit adjusts the description of all these parameters to be more
 consistent with the practice used for the others.
 
 Revewed-by: Justin Pryzby
 Discussion: https://postgr.es/m/YK2ltuLpe+FbRXzA@paquier.xyz
 Backpatch-through: 9.6
 
 
    Amit Kapila [Thu, 27 May 2021 02:29:43 +0000 (07:59 +0530)]     Fix assertion during streaming of multi-insert toast changes.
 
 While decoding the multi-insert WAL we can't clean the toast untill we get
 the last insert of that WAL record. Now if we stream the changes before we
 get the last change, the memory for toast chunks won't be released and we
 expect the txn to have streamed all changes after streaming.  This
 restriction is mainly to ensure the correctness of streamed transactions
 and it doesn't seem worth uplifting such a restriction just to allow this
 case because anyway we will stream the transaction once such an insert is
 complete.
 
 Previously we were using two different flags (one for toast tuples and
 another for speculative inserts) to indicate partial changes. Now instead
 we replaced both of them with a single flag to indicate partial changes.
 
 Reported-by: Pavan Deolasee
 Author: Dilip Kumar
 Reviewed-by: Pavan Deolasee, Amit Kapila
 Discussion: https://postgr.es/m/CABOikdN-_858zojYN-2tNcHiVTw-nhxPwoQS4quExeweQfG1Ug@mail.gmail.com
 
 
    Michael Paquier [Wed, 26 May 2021 10:53:03 +0000 (19:53 +0900)]     Fix typo in heapam.c
 
 Author: Hou Zhijie
 Discussion: https://postgr.es/m/OS0PR01MB571612191738540B27A8DE5894249@OS0PR01MB5716.jpnprd01.prod.outlook.com
 
 
    Alvaro Herrera [Tue, 25 May 2021 23:32:22 +0000 (19:32 -0400)]     Make detach-partition-concurrently-4 less timing sensitive
  Same as 
5e0b1aeb2dfe, for the companion test file. 
 This one seems lower probability (only two failures in a month of runs);
 I was hardly able to reproduce a failure without a patch, so the fact
 that I was also unable to reproduce one with it doesn't say anything.
 We'll have to wait for further buildfarm results to see if we need any
 further adjustments. 
 Discussion: https://postgr.es/m/
20210524090712.GA3771394@rfd.leadboat.com  
  Tom Lane [Tue, 25 May 2021 16:55:52 +0000 (12:55 -0400)]     Fix use of uninitialized variable in inline_function().
  Commit 
e717a9a18 introduced a code path that bypassed the call of
 get_expr_result_type, which is not good because we need its rettupdesc
 result to pass to check_sql_fn_retval.  We'd failed to notice right
 away because the code path in which check_sql_fn_retval uses that
 argument is fairly hard to reach in this context.  It's not impossible
 though, and in any case inline_function would have no business
 assuming that check_sql_fn_retval doesn't need that value. 
 To fix, move get_expr_result_type out of the if-block, which in
 turn requires moving the construction of the dummy FuncExpr
 out of it. 
 Per report from Ranier Vilela.  (I'm bemused by the lack of any
 compiler complaints...) 
 Discussion: https://postgr.es/m/CAEudQAqBqQpQ3HruWAGU_7WaMJ7tntpk0T8k_dVtNB46DqdBgw@mail.gmail.com  
  Alvaro Herrera [Tue, 25 May 2021 16:53:29 +0000 (12:53 -0400)]     Make detach-partition-concurrently-3 less timing-sensitive
 
 This recently added test has shown to be too sensitive to timing when
 sending a cancel to a session waiting for a lock.
 
 We fix this by running a no-op query in the blocked session immediately
 after the cancel; this avoids the session that sent the cancel sending
 another query immediately before the cancel has been reported.
 Idea by Noah Misch.
 
 With that fix, we sometimes see that the cancel error report is shown
 only relative to the step that is cancelled, instead of together with
 the step that sends the cancel.  To increase the probability that both
 steps are shown togeter, add a 0.1s sleep to the cancel.  In normal
 conditions this appears sufficient to silence most failures, but we'll
 see that the slower buildfarm members say about it.
 
 Reported-by: Takamichi Osumi <osumi.takamichi@fujitsu.com>
 Discussion: https://postgr.es/m/OSBPR01MB4888C4ABA361C7E81094AC66ED269@OSBPR01MB4888.jpnprd01.prod.outlook.com
 
 
    Peter Eisentraut [Tue, 25 May 2021 09:49:54 +0000 (11:49 +0200)]     postgresql.conf.sample: Make vertical spacing consistent
 
 
    Michael Paquier [Tue, 25 May 2021 05:27:18 +0000 (14:27 +0900)]     Fix memory leak when de-toasting compressed values in VACUUM FULL/CLUSTER
  VACUUM FULL and CLUSTER can be used to enforce the use of the existing
 compression method of a toastable column if a value currently stored is
 compressed with a method that does not match the column's defined
 method.  The code in charge of decompressing and recompressing toast
 values at rewrite left around the detoasted values, causing an
 accumulation of memory allocated in TopTransactionContext. 
 When processing large relations, this could cause the system to run out
 of memory.  The detoasted values are not needed once their tuple is
 rewritten, and this commit ensures that the necessary cleanup happens. 
 Issue introduced by 
bbe0a81d.  The comments of the area are reordered a
 bit while on it.  
Reported-by: Andres Freund Analyzed-by: Andres Freund Author: Michael Paquier 
Reviewed-by: Dilip Kumar Discussion: https://postgr.es/m/
20210521211929.pcehg6f23icwstdb@alap3.anarazel.de  
  Amit Kapila [Tue, 25 May 2021 05:21:45 +0000 (10:51 +0530)]     Doc: Update logical decoding stats information.
  Add the information of pg_stat_replication_slots view along with other
 system catalogs related to logical decoding. 
 Author: Vignesh C 
Reviewed-by: Amit Kapila Discussion: https://postgr.es/m/
20210319185247.ldebgpdaxsowiflw@alap3.anarazel.de  
  Amit Kapila [Tue, 25 May 2021 03:56:53 +0000 (09:26 +0530)]     Improve docs and error messages for parallel vacuum.
 
 The error messages, docs, and one of the options were using
 'parallel degree' to indicate parallelism used by vacuum command. We
 normally use 'parallel workers' at other places so change it for parallel
 vacuum accordingly.
 
 Author: Bharath Rupireddy
 Reviewed-by: Dilip Kumar, Amit Kapila
 Backpatch-through: 13
 Discussion: https://postgr.es/m/CALj2ACWz=PYrrFXVsEKb9J1aiX4raA+UBe02hdRp_zqDkrWUiw@mail.gmail.com
 
 
    Michael Paquier [Tue, 25 May 2021 01:10:09 +0000 (10:10 +0900)]     Disallow SSL renegotiation
  SSL renegotiation is already disabled as of 
48d23c72, however this does
 not prevent the server to comply with a client willing to use
 renegotiation.  In the last couple of years, renegotiation had its set
 of security issues and flaws (like the recent CVE-2021-3449), and it
 could be possible to crash the backend with a client attempting
 renegotiation. 
 This commit takes one extra step by disabling renegotiation in the
 backend in the same way as SSL compression (
f9264d15) or tickets
 (
97d3a0b0).  OpenSSL 1.1.0h has added an option named
 SSL_OP_NO_RENEGOTIATION able to achieve that.  In older versions
 there is an option called SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS that
 was undocumented, and could be set within the SSL object created when
 the TLS connection opens, but I have decided not to use it, as it feels
 trickier to rely on, and it is not official.  Note that this option is
 not usable in OpenSSL < 1.1.0h as the internal contents of the *SSL
 object are hidden to applications. 
 SSL renegotiation concerns protocols up to TLSv1.2. 
 Per original report from Robert Haas, with a patch based on a suggestion
 by Andres Freund. 
 Author: Michael Paquier 
Reviewed-by: Daniel Gustafsson Discussion: https://postgr.es/m/YKZBXx7RhU74FlTE@paquier.xyz
 Backpatch-through: 9.6  
  David Rowley [Tue, 25 May 2021 00:50:22 +0000 (12:50 +1200)]     Fix setrefs.c code for Result Cache nodes
  Result Cache, added in 
9eacee2e6 neglected to properly adjust the plan
 references in setrefs.c.  This could lead to the following error during
 EXPLAIN: 
 ERROR:  cannot decompile join alias var in plan tree 
 Fix that. 
 Bug: 17030 
Reported-by: Hans Buschmann Discussion: https://postgr.es/m/17030-
5844aecae42fe223@postgresql.org  
  Peter Geoghegan [Tue, 25 May 2021 00:14:02 +0000 (17:14 -0700)]     Consider triggering VACUUM failsafe during scan.
  The wraparound failsafe mechanism added by commit 
1e55e7d1 handled the
 one-pass strategy case (i.e. the "table has no indexes" case) by adding
 a dedicated failsafe check.  This made up for the fact that the usual
 one-pass checks inside lazy_vacuum_all_indexes() cannot ever be reached
 during a one-pass strategy VACUUM. 
 This approach failed to account for two-pass VACUUMs that opt out of
 index vacuuming up-front.  The INDEX_CLEANUP off case in the only case
 that works like that. 
 Fix this by performing a failsafe check every 4GB during the first scan
 of the heap, regardless of the details of the VACUUM.  This eliminates
 the special case, and will make the failsafe trigger more reliably. 
 Author: Peter Geoghegan <pg@bowt.ie> 
Reported-By: Andres Freund <andres@anarazel.de> Reviewed-By: Masahiko Sawada <sawada.mshk@gmail.com> Discussion: https://postgr.es/m/
20210424002921.pb3t7h6frupdqnkp@alap3.anarazel.de  
  Tom Lane [Mon, 24 May 2021 22:03:47 +0000 (18:03 -0400)]     Doc: move some catalogs.sgml entries to the right place.
  pg_statistic_ext_data.stxdexpr was listed under the wrong catalog,
 as was pg_stats_ext.exprs.  Also there was a bogus entry for
 pg_statistic_ext_data.stxexprs.  Apparently a merge failure in
 commit 
a4d75c86b. 
 Guillaume Lelarge and Tom Lane 
 Discussion: https://postgr.es/m/CAECtzeUHw+w64eUFVeV_2FJviAw6oZ0wNLkmU843ZH4hAQfiWg@mail.gmail.com  
  David Rowley [Mon, 24 May 2021 00:37:11 +0000 (12:37 +1200)]     Add missing NULL check when building Result Cache paths
  Code added in 
9e215378d to disable building of Result Cache paths when
 not all join conditions are part of the parameterization of a unique
 join failed to first check if the inner path's param_info was set before
 checking the param_info's ppi_clauses. 
 Add a check for NULL values here and just bail on trying to build the
 path if param_info is NULL. lateral_vars are not considered when
 deciding if the join is unique, so we're not missing out on doing the
 optimization when there are lateral_vars and no param_info.  
Reported-by: Coverity, via Tom Lane Discussion: https://postgr.es/m/457998.
1621779290@sss.pgh.pa.us  
  Tom Lane [Sun, 23 May 2021 16:12:09 +0000 (12:12 -0400)]     Re-order pg_attribute columns to eliminate some padding space.
  Now that attcompression is just a char, there's a lot of wasted
 padding space after it.  Move it into the group of char-wide
 columns to save a net of 4 bytes per pg_attribute entry.  While
 we're at it, swap the order of attstorage and attalign to make for
 a more logical grouping of these columns. 
 Also re-order actions in related code to match the new field ordering. 
 This patch also fixes one outright bug: equalTupleDescs() failed to
 compare attcompression.  That could, for example, cause relcache
 reload to fail to adopt a new value following a change. 
 Michael Paquier and Tom Lane, per a gripe from Andres Freund. 
 Discussion: https://postgr.es/m/
20210517204803.iyk5wwvwgtjcmc5w@alap3.anarazel.de  
  Tom Lane [Sun, 23 May 2021 14:50:21 +0000 (10:50 -0400)]     Be more verbose when the postmaster unexpectedly quits.
  Emit a LOG message when the postmaster stops because of a failure in
 the startup process.  There already is a similar message if we exit
 for that reason during PM_STARTUP phase, so it seems inconsistent
 that there was none if the startup process fails later on. 
 Also emit a LOG message when the postmaster stops after a crash
 because restart_after_crash is disabled.  This seems potentially
 helpful in case DBAs (or developers) forget that that's set.
 Also, it was the only remaining place where the postmaster would
 do an abnormal exit without any comment as to why. 
 In passing, remove an unreachable call of ExitPostmaster(0). 
 Discussion: https://postgr.es/m/194914.
1621641288@sss.pgh.pa.us  
  Bruce Momjian [Sun, 23 May 2021 02:25:05 +0000 (22:25 -0400)]     doc:  word-wrap and indent PG 14 relnotes
 
 
    Tom Lane [Sun, 23 May 2021 01:24:48 +0000 (21:24 -0400)]     Fix access to no-longer-open relcache entry in logical-rep worker.
  If we redirected a replicated tuple operation into a partition child
 table, and then tried to fire AFTER triggers for that event, the
 relation cache entry for the child table was already closed.  This has
 no visible ill effects as long as the entry is still there and still
 valid, but an unluckily-timed cache flush could result in a crash or
 other misbehavior. 
 To fix, postpone the ExecCleanupTupleRouting call (which is what
 closes the child table) until after we've fired triggers.  This
 requires a bit of refactoring so that the cleanup function can
 have access to the necessary state. 
 In HEAD, I took the opportunity to simplify some of worker.c's
 function APIs based on use of the new ApplyExecutionData struct.
 However, it doesn't seem safe/practical to back-patch that aspect,
 at least not without a lot of analysis of possible interactions
 with 
a04daa97a. 
 In passing, add an Assert to afterTriggerInvokeEvents to catch
 such cases.  This seems worthwhile because we've grown a number
 of fairly unstructured ways of calling AfterTriggerEndQuery. 
 Back-patch to v13, where worker.c grew the ability to deal with
 partitioned target tables. 
 Discussion: https://postgr.es/m/
3382681.
1621381328@sss.pgh.pa.us  
  Bruce Momjian [Sun, 23 May 2021 00:17:58 +0000 (20:17 -0400)]     doc:  PG 14 relnotes, adjust pg_{read|write}_all_data entry
  Reported-by: Stephen Frost Discussion: https://postgr.es/m/
20210522232945.GO20766@tamriel.snowman.net  
  Bruce Momjian [Sat, 22 May 2021 23:24:23 +0000 (19:24 -0400)]     Update PG 14 relnotes for vacuum_cost_page_miss
 
 Reported-by: Peter Geoghegan
 Discussion: https://postgr.es/m/CAH2-WzmgSnDX9WVoxRZxuKeCy2MzLO9Dmo4+go0RzNW0VBdhmw@mail.gmail.com
 
 
    Tom Lane [Sat, 22 May 2021 14:25:36 +0000 (10:25 -0400)]     Remove plpgsql's special-case code paths for SET/RESET.
  In the wake of 
84f5c2908, it's no longer necessary for plpgsql to
 handle SET/RESET specially.  The point of that was just to avoid
 taking a new transaction snapshot prematurely, which the regular code
 path through _SPI_execute_plan() now does just fine (in fact better,
 since it now does the right thing for LOCK too).  Hence, rip out a
 few lines of code, going back to the old way of treating SET/RESET
 as a generic SQL command.  This essentially reverts all but the
 test cases from 
b981275b6. 
 Discussion: https://postgr.es/m/15990-
eee2ac466b11293d@postgresql.org  
  David Rowley [Sat, 22 May 2021 04:22:27 +0000 (16:22 +1200)]     Fix planner's use of Result Cache with unique joins
 
 When the planner considered using a Result Cache node to cache results
 from the inner side of a Nested Loop Join, it failed to consider that the
 inner path's parameterization may not be the entire join condition.  If
 the join was marked as inner_unique then we may accidentally put the cache
 in singlerow mode.  This meant that entries would be marked as complete
 after caching the first row.  That was wrong as if only part of the join
 condition was parameterized then the uniqueness of the unique join was not
 guaranteed at the Result Cache's level.  The uniqueness is only guaranteed
 after Nested Loop applies the join filter.  If subsequent rows were found,
 this would lead to:
 
 ERROR: cache entry already complete
 
 This could have been fixed by only putting the cache in singlerow mode if
 the entire join condition was parameterized.  However, Nested Loop will
 only read its inner side so far as the first matching row when the join is
 unique, so that might mean we never get an opportunity to mark cache
 entries as complete.  Since non-complete cache entries are useless for
 subsequent lookups, we just don't bother considering a Result Cache path
 in this case.
 
 In passing, remove the XXX comment that claimed the above ERROR might be
 better suited to be an Assert.  After there being an actual case which
 triggered it, it seems better to keep it an ERROR.
 
 Reported-by: David Christensen
 Discussion: https://postgr.es/m/CAOxo6X+dy-V58iEPFgst8ahPKEU+38NZzUuc+a7wDBZd4TrHMQ@mail.gmail.com
 
 
    Bruce Momjian [Sat, 22 May 2021 00:51:53 +0000 (20:51 -0400)]     doc:  complete adding XML markup to PG 14 relnotes
 
 
    Bruce Momjian [Fri, 21 May 2021 20:16:56 +0000 (16:16 -0400)]     doc:  more XML markup for PG 14 release notes
 
 
    Tom Lane [Fri, 21 May 2021 19:12:08 +0000 (15:12 -0400)]     Disallow whole-row variables in GENERATED expressions.
 
 This was previously allowed, but I think that was just an oversight.
 It's a clear violation of the rule that a generated column cannot
 depend on itself or other generated columns.  Moreover, because the
 code was relying on the assumption that no such cross-references
 exist, it was pretty easy to crash ALTER TABLE and perhaps other
 places.  Even if you managed not to crash, you got quite unstable,
 implementation-dependent results.
 
 Per report from Vitaly Ustinov.
 Back-patch to v12 where GENERATED came in.
 
 Discussion: https://postgr.es/m/CAM_DEiWR2DPT6U4xb-Ehigozzd3n3G37ZB1+867zbsEVtYoJww@mail.gmail.com
 
 
    Tom Lane [Fri, 21 May 2021 19:02:06 +0000 (15:02 -0400)]     Fix usage of "tableoid" in GENERATED expressions.
 
 We consider this supported (though I've got my doubts that it's a
 good idea, because tableoid is not immutable).  However, several
 code paths failed to fill the field in soon enough, causing such
 a GENERATED expression to see zero or the wrong value.  This
 occurred when ALTER TABLE adds a new GENERATED column to a table
 with existing rows, and during regular INSERT or UPDATE on a
 foreign table with GENERATED columns.
 
 Noted during investigation of a report from Vitaly Ustinov.
 Back-patch to v12 where GENERATED came in.
 
 Discussion: https://postgr.es/m/CAM_DEiWR2DPT6U4xb-Ehigozzd3n3G37ZB1+867zbsEVtYoJww@mail.gmail.com
 
 
    Tom Lane [Fri, 21 May 2021 18:03:53 +0000 (14:03 -0400)]     Restore the portal-level snapshot after procedure COMMIT/ROLLBACK.
  COMMIT/ROLLBACK necessarily destroys all snapshots within the session.
 The original implementation of intra-procedure transactions just
 cavalierly did that, ignoring the fact that this left us executing in
 a rather different environment than normal.  In particular, it turns
 out that handling of toasted datums depends rather critically on there
 being an outer ActiveSnapshot: otherwise, when SPI or the core
 executor pop whatever snapshot they used and return, it's unsafe to
 dereference any toasted datums that may appear in the query result.
 It's possible to demonstrate "no known snapshots" and "missing chunk
 number N for toast value" errors as a result of this oversight. 
 Historically this outer snapshot has been held by the Portal code,
 and that seems like a good plan to preserve.  So add infrastructure
 to pquery.c to allow re-establishing the Portal-owned snapshot if it's
 not there anymore, and add enough bookkeeping support that we can tell
 whether it is or not. 
 We can't, however, just re-establish the Portal snapshot as part of
 COMMIT/ROLLBACK.  As in normal transaction start, acquiring the first
 snapshot should wait until after SET and LOCK commands.  Hence, teach
 spi.c about doing this at the right time.  (Note that this patch
 doesn't fix the problem for any PLs that try to run intra-procedure
 transactions without using SPI to execute SQL commands.) 
 This makes SPI's no_snapshots parameter rather a misnomer, so in HEAD,
 rename that to allow_nonatomic. 
 replication/logical/worker.c also needs some fixes, because it wasn't
 careful to hold a snapshot open around AFTER trigger execution.
 That code doesn't use a Portal, which I suspect someday we're gonna
 have to fix.  But for now, just rearrange the order of operations.
 This includes back-patching the recent addition of finish_estate()
 to centralize the cleanup logic there. 
 This also back-patches commit 
2ecfeda3e into v13, to improve the
 test coverage for worker.c (it was that test that exposed that
 worker.c's snapshot management is wrong). 
 Per bug #15990 from Andreas Wicht.  Back-patch to v11 where
 intra-procedure COMMIT was added. 
 Discussion: https://postgr.es/m/15990-
eee2ac466b11293d@postgresql.org  
  Peter Eisentraut [Fri, 21 May 2021 15:10:09 +0000 (17:10 +0200)]     Put some psql documentation pieces back into alphabetical order
 
 
    Amit Kapila [Fri, 21 May 2021 02:24:27 +0000 (07:54 +0530)]     Fix deadlock for multiple replicating truncates of the same table.
 
 While applying the truncate change, the logical apply worker acquires
 RowExclusiveLock on the relation being truncated. This allowed truncate on
 the relation at a time by two apply workers which lead to a deadlock. The
 reason was that one of the workers after updating the pg_class tuple tries
 to acquire SHARE lock on the relation and started to wait for the second
 worker which has acquired RowExclusiveLock on the relation. And when the
 second worker tries to update the pg_class tuple, it starts to wait for
 the first worker which leads to a deadlock. Fix it by acquiring
 AccessExclusiveLock on the relation before applying the truncate change as
 we do for normal truncate operation.
 
 Author: Peter Smith, test case by Haiying Tang
 Reviewed-by: Dilip Kumar, Amit Kapila
 Backpatch-through: 11
 Discussion: https://postgr.es/m/CAHut+PsNm43p0jM+idTvWwiGZPcP0hGrHMPK9TOAkc+a4UpUqw@mail.gmail.com
 
 
    Tom Lane [Thu, 20 May 2021 22:32:37 +0000 (18:32 -0400)]     Avoid detoasting failure after COMMIT inside a plpgsql FOR loop.
  exec_for_query() normally tries to prefetch a few rows at a time
 from the query being iterated over, so as to reduce executor
 entry/exit overhead.  Unfortunately this is unsafe if we have
 COMMIT or ROLLBACK within the loop, because there might be
 TOAST references in the data that we prefetched but haven't
 yet examined.  Immediately after the COMMIT/ROLLBACK, we have
 no snapshots in the session, meaning that VACUUM is at liberty
 to remove recently-deleted TOAST rows. 
 This was originally reported as a case triggering the "no known
 snapshots" error in init_toast_snapshot(), but even if you miss
 hitting that, you can get "missing toast chunk", as illustrated
 by the added isolation test case. 
 To fix, just disable prefetching in non-atomic contexts.  Maybe
 there will be performance complaints prompting us to work harder
 later, but it's not clear at the moment that this really costs
 much, and I doubt we'd want to back-patch any complicated fix. 
 In passing, adjust that error message in init_toast_snapshot()
 to be a little clearer about the likely cause of the problem. 
 Patch by me, based on earlier investigation by Konstantin Knizhnik. 
 Per bug #15990 from Andreas Wicht.  Back-patch to v11 where
 intra-procedure COMMIT was added. 
 Discussion: https://postgr.es/m/15990-
eee2ac466b11293d@postgresql.org  
  Bruce Momjian [Thu, 20 May 2021 19:50:46 +0000 (15:50 -0400)]     doc:  change PG 14 relnotes as suggested by Justin Pryzby
 
 
    Andrew Dunstan [Thu, 20 May 2021 19:11:17 +0000 (15:11 -0400)]     Install PostgresVersion.pm
  A lamentable oversight on my part meant that when PostgresVersion.pm was
 added in commit 
4c4eaf3d19 provision to install it was not added to the
 Makefile, so it was not installed along with the other perl modules.  
  Tom Lane [Thu, 20 May 2021 17:03:08 +0000 (13:03 -0400)]     Clean up cpluspluscheck violation.
  "typename" is a C++ keyword, so pg_upgrade.h fails to compile in C++.
 Fortunately, there seems no likely reason for somebody to need to
 do that.  Nonetheless, it's project policy that all .h files should
 pass cpluspluscheck, so rename the argument to fix that. 
 Oversight in 
57c081de0; back-patch as that was.  (The policy requiring
 pg_upgrade.h to pass cpluspluscheck only goes back to v12, but it
 seems best to keep this code looking the same in all branches.)  
  Andrew Dunstan [Thu, 20 May 2021 12:03:15 +0000 (08:03 -0400)]     Use a more portable way to get the version string in PostgresNode
 
 Older versions of perl on Windows don't like the list form of pipe open,
 and perlcritic doesn't like the string form of open, so we avoid both
 with a simpler formulation using qx{}.
 
 Per complaint from Amit Kapila.
 
 
    Tom Lane [Wed, 19 May 2021 18:04:01 +0000 (14:04 -0400)]     Avoid creating testtablespace directories where not wanted.
  Recently we refactored things so that pg_regress makes the
 "testtablespace" subdirectory used by the core regression tests,
 instead of doing that in the makefiles.  That had the undesirable
 side effect of making such a subdirectory in every directory that
 has "input" or "output" test files.  Since these subdirectories
 remain empty, git doesn't complain about them, but nonetheless
 they're clutter. 
 To fix, invent an explicit --make-testtablespace-dir switch,
 so that pg_regress only makes the subdirectory when explicitly
 told to. 
 Discussion: https://postgr.es/m/
2854388.
1621284789@sss.pgh.pa.us  
  Bruce Momjian [Wed, 19 May 2021 15:22:21 +0000 (11:22 -0400)]     doc:  revert 
1e7d53bd01 so libpq chapter number is accessable 
 Fix PG 14 relnotes to use <link> instead of <xref>.  This was discussed
 in commit message 
59fa7eb603.  
  Bruce Momjian [Wed, 19 May 2021 15:01:28 +0000 (11:01 -0400)]     doc:  add xreflabel for libpq chapter, needed for PG 14 relnotes