PostgreSQL 9.6.18 commit log

Stamp 9.6.18.

commit   : b3960286a6fa1b195a06cfc38701866e21394861    
  
author   : Tom Lane <[email protected]>    
date     : Mon, 11 May 2020 17:14:21 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Mon, 11 May 2020 17:14:21 -0400    

Click here for diff

M configure
M configure.in
M doc/bug.template
M src/include/pg_config.h.win32
M src/interfaces/libpq/libpq.rc.in
M src/port/win32ver.rc

Translation updates

commit   : 3cbf235e56df461b18c371cbca6a9dc422b0d2f0    
  
author   : Peter Eisentraut <[email protected]>    
date     : Mon, 11 May 2020 13:28:48 +0200    
  
committer: Peter Eisentraut <[email protected]>    
date     : Mon, 11 May 2020 13:28:48 +0200    

Click here for diff

Source-Git-URL: https://git.postgresql.org/git/pgtranslation/messages.git  
Source-Git-Hash: 3aef29b59119c69f8df45f94c48d451543e1ed2b  

M src/backend/po/de.po
M src/backend/po/fr.po
M src/backend/po/ru.po
M src/backend/po/sv.po
M src/bin/pg_dump/po/de.po
M src/bin/pg_dump/po/fr.po
M src/bin/pg_dump/po/ru.po
M src/bin/pg_dump/po/sv.po
M src/bin/psql/po/ru.po
M src/bin/scripts/po/de.po
M src/bin/scripts/po/fr.po
M src/bin/scripts/po/ru.po
M src/bin/scripts/po/sv.po
M src/pl/plpgsql/src/po/ru.po

Release notes for 12.3, 11.8, 10.13, 9.6.18, 9.5.22.

commit   : d88b958446d23fc9a7b8fd389cd8baf4870df2e9    
  
author   : Tom Lane <[email protected]>    
date     : Sun, 10 May 2020 15:06:00 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Sun, 10 May 2020 15:06:00 -0400    

Click here for diff

M doc/src/sgml/release-9.6.sgml

Prevent archive recovery from scanning non-existent WAL files.

commit   : 70b5979742f8bb7e5ee83a889989fbe57817cf74    
  
author   : Fujii Masao <[email protected]>    
date     : Wed, 8 Apr 2020 00:49:29 +0900    
  
committer: Fujii Masao <[email protected]>    
date     : Wed, 8 Apr 2020 00:49:29 +0900    

Click here for diff

Previously when there were multiple timelines listed in the history file  
of the recovery target timeline, archive recovery searched all of them,  
starting from the newest timeline to the oldest one, to find the segment  
to read. That is, archive recovery had to continuously fail scanning  
the segment until it reached the timeline that the segment belonged to.  
These scans for non-existent segment could be harmful on the recovery  
performance especially when archival area was located on the remote  
storage and each scan could take a long time.  
  
To address the issue, this commit changes archive recovery so that  
it skips scanning the timeline that the segment to read doesn't belong to.  
  
Per discussion, back-patch to all supported versions.  
  
Author: Kyotaro Horiguchi, tweaked a bit by Fujii Masao  
Reviewed-by: David Steele, Pavel Suderevsky, Grigory Smolkin  
Discussion: https://postgr.es/m/[email protected]  
Discussion: https://postgr.es/m/[email protected]  

M src/backend/access/transam/xlog.c

pg_restore: Provide file name with one failure message

commit   : b37361090e12348bb55d4a51d7f7133216798f0b    
  
author   : Alvaro Herrera <[email protected]>    
date     : Fri, 8 May 2020 19:38:46 -0400    
  
committer: Alvaro Herrera <[email protected]>    
date     : Fri, 8 May 2020 19:38:46 -0400    

Click here for diff

Almost all error messages already include file name where relevant, but  
this one had been overlooked.  Repair.  
  
Backpatch to 9.5.  
  
Author: Euler Taveira <[email protected]>  
Discussion: https://postgr.es/m/CAH503wA_VOrcKL_43p9atRejCDYmOZ8MzfK9S6TJrQqBqNeAXA@mail.gmail.com  
Reviewed-by: Álvaro Herrera <[email protected]>  

M src/bin/pg_dump/pg_backup_directory.c

Fix YA text phrase search bug.

commit   : 7c9d9aa5ca2dd9b7661b2a2de75a3b963f3bc17c    
  
author   : Tom Lane <[email protected]>    
date     : Thu, 7 May 2020 15:59:52 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Thu, 7 May 2020 15:59:52 -0400    

Click here for diff

checkcondition_str() failed to report multiple matches for a prefix  
pattern correctly: it would dutifully merge the match positions, but  
then after exiting that loop, if the last prefix-matching word had  
had no suitable positions, it would report there were no matches.  
The upshot would be failing to recognize a match that the query  
should match.  
  
It looks like you need all of these conditions to see the bug:  
* a phrase search (else we don't ask for match position details)  
* a prefix search item (else we don't get to this code)  
* a weight restriction (else checkclass_str won't fail)  
  
Noted while investigating a problem report from Pavel Borisov,  
though this is distinct from the issue he was on about.  
  
Back-patch to 9.6 where phrase search was added.  

M src/backend/utils/adt/tsvector_op.c
M src/test/regress/expected/tstypes.out
M src/test/regress/sql/tstypes.sql

Heed lock protocol in DROP OWNED BY

commit   : 2bf56f50ebb0c9ce2416b27a640cf61488b5ed89    
  
author   : Alvaro Herrera <[email protected]>    
date     : Wed, 6 May 2020 12:29:41 -0400    
  
committer: Alvaro Herrera <[email protected]>    
date     : Wed, 6 May 2020 12:29:41 -0400    

Click here for diff

We were acquiring object locks then deleting objects one by one, instead  
of acquiring all object locks first, ignoring those that did not exist,  
and then deleting all objects together.   The latter is the correct  
protocol to use, and what this commits changes to code to do.  Failing  
to follow that leads to "cache lookup failed for relation XYZ" error  
reports when DROP OWNED runs concurrently with other DDL -- for example,  
a session termination that removes some temp tables.  
  
Author: Álvaro Herrera  
Reported-by: Mithun Chicklore Yogendra (Mithun CY)  
Reviewed-by: Ahsan Hadi, Tom Lane  
Discussion: https://postgr.es/m/CADq3xVZTbzK4ZLKq+dn_vB4QafXXbmMgDP3trY-GuLnib2Ai1w@mail.gmail.com  

M src/backend/catalog/dependency.c
M src/backend/catalog/pg_shdepend.c
M src/include/catalog/dependency.h

Handle spaces for Python install location in MSVC scripts

commit   : e07fdc126ef3c75dedd279f87c3be6e8eed5543d    
  
author   : Michael Paquier <[email protected]>    
date     : Wed, 6 May 2020 21:08:38 +0900    
  
committer: Michael Paquier <[email protected]>    
date     : Wed, 6 May 2020 21:08:38 +0900    

Click here for diff

Attempting to use an installation path of Python that includes spaces  
caused the MSVC builds to fail.  This fixes the issue by using the same  
quoting method as ad7595b for OpenSSL.  
  
Author: Victor Wagner  
Discussion: https://postgr.es/m/[email protected]  
Backpatch-through: 9.5  

M src/tools/msvc/Mkvcbuild.pm

Get rid of trailing semicolons in C macro definitions.

commit   : a8df87d8638c4ae6e8998fdffe54e02fe71882aa    
  
author   : Tom Lane <[email protected]>    
date     : Fri, 1 May 2020 17:28:01 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Fri, 1 May 2020 17:28:01 -0400    

Click here for diff

Writing a trailing semicolon in a macro is almost never the right thing,  
because you almost always want to write a semicolon after each macro  
call instead.  (Even if there was some reason to prefer not to, pgindent  
would probably make a hash of code formatted that way; so within PG the  
rule should basically be "don't do it".)  Thus, if we have a semi inside  
the macro, the compiler sees "something;;".  Much of the time the extra  
empty statement is harmless, but it could lead to mysterious syntax  
errors at call sites.  In perhaps an overabundance of neatnik-ism, let's  
run around and get rid of the excess semicolons whereever possible.  
  
The only thing worse than a mysterious syntax error is a mysterious  
syntax error that only happens in the back branches; therefore,  
backpatch these changes where relevant, which is most of them because  
most of these mistakes are old.  (The lack of reported problems shows  
that this is largely a hypothetical issue, but still, it could bite  
us in some future patch.)  
  
John Naylor and Tom Lane  
  
Discussion: https://postgr.es/m/CACPNZCs0qWTqJ2QUSGJ07B7uvAvzMb-KbG2q+oo+J3tsWN5cqw@mail.gmail.com  

M contrib/btree_gist/btree_ts.c
M contrib/btree_gist/btree_utils_num.h
M contrib/pg_trgm/trgm.h
M contrib/pgcrypto/crypt-blowfish.c
M src/backend/nodes/readfuncs.c
M src/backend/utils/adt/formatting.c
M src/backend/utils/sort/gen_qsort_tuple.pl
M src/include/access/nbtree.h
M src/port/qsort.c
M src/port/qsort_arg.c

Fix full text search to handle NOT above a phrase search correctly.

commit   : 22dcb6c206ac72d0ea722d22e89e5755beed7b76    
  
author   : Tom Lane <[email protected]>    
date     : Mon, 27 Apr 2020 12:21:04 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Mon, 27 Apr 2020 12:21:04 -0400    

Click here for diff

Queries such as '!(foo<->bar)' failed to find matching rows when  
implemented as a GiST or GIN index search.  That's because of  
failing to handle phrase searches as tri-valued when considering  
a query without any position information for the target tsvector.  
We can only say that the phrase operator might match, not that it  
does match; and therefore its NOT also might match.  The previous  
coding incorrectly inverted the approximate phrase result to  
decide that there was certainly no match.  
  
To fix, we need to make TS_phrase_execute return a real ternary result,  
and then bubble that up accurately in TS_execute.  As long as we have  
to do that anyway, we can simplify the baroque things TS_phrase_execute  
was doing internally to manage tri-valued searching with only a bool  
as explicit result.  
  
For now, I left the externally-visible result of TS_execute as a plain  
bool.  There do not appear to be any outside callers that need to  
distinguish a three-way result, given that they passed in a flag  
saying what to do in the absence of position data.  This might need  
to change someday, but we wouldn't want to back-patch such a change.  
  
Although tsginidx.c has its own TS_execute_ternary implementation for  
use at upper index levels, that sadly managed to get this case wrong  
as well :-(.  Fixing it is a lot easier fortunately.  
  
Per bug #16388 from Charles Offenbacher.  Back-patch to 9.6 where  
phrase search was introduced.  
  
Discussion: https://postgr.es/m/[email protected]  

M src/backend/utils/adt/tsginidx.c
M src/backend/utils/adt/tsvector_op.c
M src/test/regress/data/tsearch.data
M src/test/regress/expected/tsearch.out
M src/test/regress/expected/tstypes.out
M src/test/regress/sql/tsearch.sql
M src/test/regress/sql/tstypes.sql

Fix error case for CREATE ROLE ... IN ROLE.

commit   : 86b7a4e6fd7db56022bf49b1c7eb482fdfddf8e5    
  
author   : Andrew Gierth <[email protected]>    
date     : Sat, 25 Apr 2020 05:10:10 +0100    
  
committer: Andrew Gierth <[email protected]>    
date     : Sat, 25 Apr 2020 05:10:10 +0100    

Click here for diff

CreateRole() was passing a Value node, not a RoleSpec node, for the  
newly-created role name when adding the role as a member of existing  
roles for the IN ROLE syntax.  
  
This mistake went unnoticed because the node in question is used only  
for error messages and is not accessed on non-error paths.  
  
In older pg versions (such as 9.5 where this was found), this results  
in an "unexpected node type" error in place of the real error. That  
node type check was removed at some point, after which the code would  
accidentally fail to fail on 64-bit platforms (on which accessing the  
Value node as if it were a RoleSpec would be mostly harmless) or give  
an "unexpected role type" error on 32-bit platforms.  
  
Fix the code to pass the correct node type, and add an lfirst_node  
assertion just in case.  
  
Per report on irc from user m1chelangelo.  
  
Backpatch all the way, because this error has been around for a long  
time.  

M src/backend/commands/user.c

Update Windows timezone name list to include currently-known zones.

commit   : f65f3a5d8e724c8ea425bf7a12e447b23e532779    
  
author   : Tom Lane <[email protected]>    
date     : Fri, 24 Apr 2020 17:53:23 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Fri, 24 Apr 2020 17:53:23 -0400    

Click here for diff

Thanks to Juan José Santamaría Flecha.  
  
Discussion: https://postgr.es/m/[email protected]  

M src/bin/initdb/findtimezone.c
M src/tools/win32tzlist.pl

Improve placement of "display name" comment in win32_tzmap[] entries.

commit   : 351252904a8c5b674a508b7fa5c3924c66d1f7f6    
  
author   : Tom Lane <[email protected]>    
date     : Fri, 24 Apr 2020 17:21:44 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Fri, 24 Apr 2020 17:21:44 -0400    

Click here for diff

Sticking this comment at the end of the last line was a bad idea: it's  
not particularly readable, and it tempts pgindent to mess with line  
breaks within the comment, which in turn reveals that win32tzlist.pl's  
clean_displayname() does the wrong thing to clean up such line breaks.  
While that's not hard to fix, there's basically no excuse for this  
arrangement to begin with, especially since it makes the table layout  
needlessly vary across back branches with different pgindent rules.  
Let's just put the comment inside the braces, instead.  
  
This commit just moves and reformats the comments, and updates  
win32tzlist.pl to match; there's no actual data change.  
  
Per odd-looking results from Juan José Santamaría Flecha.  
Back-patch, since the point is to make win32_tzmap[] look the  
same in all supported branches again.  
  
Discussion: https://postgr.es/m/[email protected]  

M src/bin/initdb/findtimezone.c
M src/tools/win32tzlist.pl

Update time zone data files to tzdata release 2020a.

commit   : 66be997425cfffd5301463780fd8c45e7b89067e    
  
author   : Tom Lane <[email protected]>    
date     : Fri, 24 Apr 2020 10:54:47 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Fri, 24 Apr 2020 10:54:47 -0400    

Click here for diff

DST law changes in Morocco and the Canadian Yukon.  
Historical corrections for Shanghai.  
  
The America/Godthab zone is renamed to America/Nuuk to reflect  
current English usage; however, the old name remains available as a  
compatibility link.  

M src/timezone/data/tzdata.zi

Remove some unstable parts from new TAP test for archive status check

commit   : 11f0046996e1222e7eb2ee2c9597a37481773ae8    
  
author   : Michael Paquier <[email protected]>    
date     : Fri, 24 Apr 2020 11:34:11 +0900    
  
committer: Michael Paquier <[email protected]>    
date     : Fri, 24 Apr 2020 11:34:11 +0900    

Click here for diff

The test is proving to have timing issues when looking at archive status  
files on standbys after crash recovery, while other parts of the test  
rely on pg_stat_archiver as a wait point to make sure that a given state  
of the archiving is reached.  The coverage is not heavily impacted by  
the removal those extra tests.  
  
Per reports from several buildfarm animals, like crake, piculet,  
culicidae and francolin.  
  
Discussion: https://postgr.es/m/[email protected]  
Backpatch-through: 9.5  

M src/test/recovery/t/020_archive_status.pl

Fix handling of WAL segments ready to be archived during crash recovery

commit   : c2d8ae0dfe84aa83ff95d6cace0c6cbb93183f8c    
  
author   : Michael Paquier <[email protected]>    
date     : Fri, 24 Apr 2020 08:48:51 +0900    
  
committer: Michael Paquier <[email protected]>    
date     : Fri, 24 Apr 2020 08:48:51 +0900    

Click here for diff

78ea8b5 has fixed an issue related to the recycling of WAL segments on  
standbys depending on archive_mode.  However, it has introduced a  
regression with the handling of WAL segments ready to be archived during  
crash recovery, causing those files to be recycled without getting  
archived.  
  
This commit fixes the regression by tracking in shared memory if a live  
cluster is either in crash recovery or archive recovery as the handling  
of WAL segments ready to be archived is different in both cases (those  
WAL segments should not be removed during crash recovery), and by using  
this new shared memory state to decide if a segment can be recycled or  
not.  Previously, it was not possible to know if a cluster was in crash  
recovery or archive recovery as the shared state was able to track only  
if recovery was happening or not, leading to the problem.  
  
A set of TAP tests is added to close the gap here, making sure that WAL  
segments ready to be archived are correctly handled when a cluster is in  
archive or crash recovery with archive_mode set to "on" or "always", for  
both standby and primary.  
  
Reported-by: Benoît Lobréau  
Author: Jehan-Guillaume de Rorthais  
Reviewed-by: Kyotaro Horiguchi, Fujii Masao, Michael Paquier  
Discussion: https://postgr.es/m/20200331172229.40ee00dc@firost  
Backpatch-through: 9.5  

M src/backend/access/transam/xlog.c
M src/backend/access/transam/xlogarchive.c
M src/include/access/xlog.h
A src/test/recovery/t/020_archive_status.pl

docs: land height is "elevation", not "altitude"

commit   : c5abde5f350d06cd62f0f1244dfcaebc5eaf1fc5    
  
author   : Bruce Momjian <[email protected]>    
date     : Wed, 22 Apr 2020 16:23:19 -0400    
  
committer: Bruce Momjian <[email protected]>    
date     : Wed, 22 Apr 2020 16:23:19 -0400    

Click here for diff

See https://mapscaping.com/blogs/geo-candy/what-is-the-difference-between-elevation-relief-and-altitude  
No patching of regression tests.  
  
Reported-by: [email protected]  
  
Discussion: https://postgr.es/m/[email protected]  
  
Backpatch-through: 9.5  

M doc/src/sgml/advanced.sgml
M doc/src/sgml/ddl.sgml

Fix memory leak in libpq when using sslmode=verify-full

commit   : c9c15790d5a6ef667729ab4e40c1e73f368f95c4    
  
author   : Michael Paquier <[email protected]>    
date     : Wed, 22 Apr 2020 07:28:00 +0900    
  
committer: Michael Paquier <[email protected]>    
date     : Wed, 22 Apr 2020 07:28:00 +0900    

Click here for diff

Checking if Subject Alternative Names (SANs) from a certificate match  
with the hostname connected to leaked memory after each lookup done.  
  
This is broken since acd08d7 that added support for SANs in SSL  
certificates, so backpatch down to 9.5.  
  
Author: Roman Peshkurov  
Reviewed-by: Hamid Akhtar, Michael Paquier, David Steele  
Discussion: https://postgr.es/m/CALLDf-pZ-E3mjxd5=bnHsDu9zHEOnpgPgdnO84E2RuwMCjjyPw@mail.gmail.com  
Backpatch-through: 9.5  

M src/interfaces/libpq/fe-secure-openssl.c

Fix possible crash during FATAL exit from reindexing.

commit   : 5c1c27eef94a3d22f2fa4feab922c4af72a3a669    
  
author   : Tom Lane <[email protected]>    
date     : Tue, 21 Apr 2020 15:58:43 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Tue, 21 Apr 2020 15:58:43 -0400    

Click here for diff

index.c supposed that it could just use a PG_TRY block to clean up the  
state associated with an active REINDEX operation.  However, that code  
doesn't run if we do a FATAL exit --- for example, due to a SIGTERM  
shutdown signal --- while the REINDEX is happening.  And that state does  
get consulted during catalog accesses, which makes it problematic if we  
do any catalog accesses during shutdown --- for example, to clean up any  
temp tables created in the session.  
  
If this combination of circumstances occurred, we could find ourselves  
trying to access already-freed memory.  In debug builds that'd fairly  
reliably cause an assertion failure.  In production we might often  
get away with it, but with some bad luck it could cause a core dump.  
  
Another possible bad outcome is an erroneous conclusion that an  
index-to-be-accessed is being reindexed; but it looks like that would  
be unlikely to have any consequences worse than failing to drop temp  
tables right away.  (They'd still get dropped by the next session that  
uses that temp schema.)  
  
To fix, get rid of the use of PG_TRY here, and instead hook into  
the transaction abort mechanisms to clean up reindex state.  
  
Per bug #16378 from Alexander Lakhin.  This has been wrong for a  
very long time, so back-patch to all supported branches.  
  
Discussion: https://postgr.es/m/[email protected]  

M src/backend/access/transam/xact.c
M src/backend/catalog/index.c
M src/include/catalog/index.h

Fix minor violations of FunctionCallInvoke usage protocol.

commit   : 13366b1cd7b7fe2fa33b33761c8513f1ee99b2f9    
  
author   : Tom Lane <[email protected]>    
date     : Tue, 21 Apr 2020 14:23:42 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Tue, 21 Apr 2020 14:23:42 -0400    

Click here for diff

Working on commit 1c455078b led me to check through FunctionCallInvoke  
call sites to see if every one was being honest about (a) making sure  
that fcinfo.isnull is initially false, and (b) checking its state after  
the call.  Sure enough, I found some violations.  
  
The main one is that finalize_partialaggregate re-used serialfn_fcinfo  
without resetting isnull, even though it clearly intends to cater for  
serialfns that return NULL.  There would only be an issue with a  
non-strict serialfn, since it's unlikely that a serialfn would return  
NULL for non-null input.  We have no non-strict serialfns in core, and  
there may be none in the wild either, which would account for the lack  
of complaints.  Still, it's clearly wrong, so back-patch that fix to  
9.6 where finalize_partialaggregate was introduced.  
  
Also, arrayfuncs.c and rowtypes.c contained various callers that were  
not bothering to check for result nulls.  While what's being called is  
a comparison or hash function that probably *shouldn't* return null,  
that's a lousy excuse for not having any check at all.  There are  
existing places that just Assert(!fcinfo->isnull) in comparable  
situations, so I added that to the places that were calling btree  
comparison or hash support functions.  In the places calling  
boolean-returning equality functions, it's quite cheap to have them  
treat isnull as FALSE, so make those places do that.  Also remove some  
"locfcinfo->isnull = false" assignments that are unnecessary given the  
assumption that no previous call returned null.  These changes seem like  
mostly neatnik-ism or debugging support, so I didn't back-patch.  

M src/backend/executor/nodeAgg.c
M src/include/fmgr.h

doc: change SGML markup "figure" to "example"

commit   : f8ba8dddb4e050ebb3c6175c1cc7225185ac17c9    
  
author   : Bruce Momjian <[email protected]>    
date     : Mon, 20 Apr 2020 21:41:12 -0400    
  
committer: Bruce Momjian <[email protected]>    
date     : Mon, 20 Apr 2020 21:41:12 -0400    

Click here for diff

Reported-by: Jürgen Purtz  
  
Discussion: https://postgr.es/m/[email protected]  
  
Author: Jürgen Purtz  
  
Backpatch-through: 9.5  

M doc/src/sgml/func.sgml

Fix race conditions in synchronous standby management.

commit   : c65c1aa82105db479e01ffcd8618c2f7d873a429    
  
author   : Tom Lane <[email protected]>    
date     : Sat, 18 Apr 2020 14:02:45 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Sat, 18 Apr 2020 14:02:45 -0400    

Click here for diff

We have repeatedly seen the buildfarm reach the Assert(false) in  
SyncRepGetSyncStandbysPriority.  This apparently is due to failing to  
consider the possibility that the sync_standby_priority values in  
shared memory might be inconsistent; but they will be whenever only  
some of the walsenders have updated their values after a change in  
the synchronous_standby_names setting.  That function is vastly too  
complex for what it does, anyway, so rewriting it seems better than  
trying to apply a band-aid fix.  
  
Furthermore, the API of SyncRepGetSyncStandbys is broken by design:  
it returns a list of WalSnd array indexes, but there is nothing  
guaranteeing that the contents of the WalSnd array remain stable.  
Thus, if some walsender exits and then a new walsender process  
takes over that WalSnd array slot, a caller might make use of  
WAL position data that it should not, potentially leading to  
incorrect decisions about whether to release transactions that  
are waiting for synchronous commit.  
  
To fix, replace SyncRepGetSyncStandbys with a new function  
SyncRepGetCandidateStandbys that copies all the required data  
from shared memory while holding the relevant mutexes.  If the  
associated walsender process then exits, this data is still safe to  
make release decisions with, since we know that that much WAL *was*  
sent to a valid standby server.  This incidentally means that we no  
longer need to treat sync_standby_priority as protected by the  
SyncRepLock rather than the per-walsender mutex.  
  
SyncRepGetSyncStandbys is no longer used by the core code, so remove  
it entirely in HEAD.  However, it seems possible that external code is  
relying on that function, so do not remove it from the back branches.  
Instead, just remove the known-incorrect Assert.  When the bug occurs,  
the function will return a too-short list, which callers should treat  
as meaning there are not enough sync standbys, which seems like a  
reasonably safe fallback until the inconsistent state is resolved.  
Moreover it's bug-compatible with what has been happening in non-assert  
builds.  We cannot do anything about the walsender-replacement race  
condition without an API/ABI break.  
  
The bogus assertion exists back to 9.6, but 9.6 is sufficiently  
different from the later branches that the patch doesn't apply at all.  
I chose to just remove the bogus assertion in 9.6, feeling that the  
probability of a bad outcome from the walsender-replacement race  
condition is too low to justify rewriting the whole patch for 9.6.  
  
Discussion: https://postgr.es/m/[email protected]  

M src/backend/replication/syncrep.c

Use a slightly more liberal regex to detect Visual Studio version

commit   : 4c9239d08a87b8e4a5f9731c29993f9976aa824f    
  
author   : Andrew Dunstan <[email protected]>    
date     : Fri, 17 Apr 2020 14:55:55 -0400    
  
committer: Andrew Dunstan <[email protected]>    
date     : Fri, 17 Apr 2020 14:55:55 -0400    

Click here for diff

Apparently in some language versions of Visual Studio nmake outputs some  
material after the version number and before the end of the line. This  
has been seen in Chinese versions. Therefore, we no longer demand that  
the version string comes at the end of a line.  
  
Per complaint from Cuiping Lin.  
  
Backpatch to all live branches.  

M src/tools/msvc/VSObjectFactory.pm

Fix cache reference leak in contrib/sepgsql.

commit   : 3cdf2421a299f2ebca0f79166b4d959d3e6a5184    
  
author   : Tom Lane <[email protected]>    
date     : Thu, 16 Apr 2020 14:45:54 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Thu, 16 Apr 2020 14:45:54 -0400    

Click here for diff

fixup_whole_row_references() did the wrong thing with a dropped column,  
resulting in a commit-time warning about a cache reference leak.  
  
I (tgl) added a test case exercising this, but back-patched the test  
only as far as v10; the patch didn't apply cleanly to 9.6 and it  
didn't seem worth the trouble to adapt it.  The bug is pretty old  
though, so apply the code change all the way back.  
  
Michael Luo, with cosmetic improvements by me  
  
Discussion: https://postgr.es/m/BYAPR08MB5606D1453D7F50E2AF4D2FD29AD80@BYAPR08MB5606.namprd08.prod.outlook.com  

M contrib/sepgsql/dml.c

Fix minor memory leak in pg_dump

commit   : 45d328bde659068b0c3dec7aeeb7ce667bdc4cfb    
  
author   : Michael Paquier <[email protected]>    
date     : Wed, 15 Apr 2020 15:57:00 +0900    
  
committer: Michael Paquier <[email protected]>    
date     : Wed, 15 Apr 2020 15:57:00 +0900    

Click here for diff

A query used to read default ACL information from the catalogs did not  
free a set of PQExpBuffer.  
  
Oversight in commit e2090d9, so backpatch down to 9.6.  
  
Author: Jie Zhang  
Reviewed-by: Sawada Masahiko  
Discussion: https://postgr.es/m/05bcbc5857f948efa0b451b85a48ae10@G08CNEXMBPEKD06.g08.fujitsu.local  
Backpatch-through: 9.6  

M src/bin/pg_dump/pg_dump.c

Clear dangling pointer to avoid bogus EXPLAIN printout in a corner case.

commit   : 242ca479fea1a217f91c0c2ce222abc4014e57fc    
  
author   : Tom Lane <[email protected]>    
date     : Sat, 11 Apr 2020 12:29:06 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Sat, 11 Apr 2020 12:29:06 -0400    

Click here for diff

ExecReScanHashJoin will destroy the join's hash table if it expects  
that the inner relation will produce different rows on rescan.  
Up to now it's not bothered to clear the additional pointer to that  
hash table that exists in the child HashState node.  However, it's  
possible for the query to terminate without building a fresh hash  
table (this happens if the outer relation is found to be empty  
during the final rescan).  So we can end with a dangling pointer  
to a deleted hash table.  That was harmless originally, but since  
9.0 EXPLAIN ANALYZE has used that pointer to print hash table  
statistics.  In debug builds this reproducibly results in garbage  
statistics.  In non-debug builds there's frequently no ill effects,  
but in principle one could get wrong EXPLAIN ANALYZE output, or  
perhaps even a crash if free() has released the hashtable memory  
back to the OS.  
  
To fix, just make sure we clear the additional pointer when destroying  
the hash table.  In problematic cases, EXPLAIN ANALYZE will then print  
no hashtable statistics (reverting to its pre-9.0 behavior).  This isn't  
ideal, but since the problem manifests only in unusual corner cases,  
it's hard to justify taking any risks to do better in the back  
branches.  A follow-on patch will improve matters in HEAD.  
  
Konstantin Knizhnik and Tom Lane, per diagnosis by Thomas Munro  
of a trouble report from Alvaro Herrera.  
  
Discussion: https://postgr.es/m/[email protected]  

M src/backend/executor/nodeHashjoin.c

Doc: clarify locking requirements for ALTER TABLE ADD FOREIGN KEY.

commit   : 1d676ffd41be443d0c7a715f3e03841430ba4a2b    
  
author   : Tom Lane <[email protected]>    
date     : Fri, 10 Apr 2020 13:12:58 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Fri, 10 Apr 2020 13:12:58 -0400    

Click here for diff

The docs explained that a SHARE ROW EXCLUSIVE lock is needed on the  
referenced table, but failed to say the same about the table being  
altered.  Since the page says that ACCESS EXCLUSIVE lock is taken  
unless otherwise stated, this left readers with the wrong conclusion.  
  
Discussion: https://postgr.es/m/[email protected]  

M doc/src/sgml/ref/alter_table.sgml

Doc: sync CREATE GROUP syntax synopsis with CREATE ROLE.

commit   : 89e54113416018ad5fadeeca8e009a2e1dc233cd    
  
author   : Tom Lane <[email protected]>    
date     : Fri, 10 Apr 2020 10:44:10 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Fri, 10 Apr 2020 10:44:10 -0400    

Click here for diff

CREATE GROUP is an exact alias for CREATE ROLE, and CREATE USER is  
almost an exact alias, as can easily be confirmed by checking the  
code.  So the man page syntax descriptions ought to match up.  The  
last few additions of role options seem to have forgotten to update  
create_group.sgml, though.  Fix that, and add a naggy reminder to  
create_role.sgml in hopes of not forgetting again.  
  
Discussion: https://postgr.es/m/[email protected]  

M doc/src/sgml/ref/create_group.sgml

Further cleanup of ts_headline code.

commit   : c2599b93df0a94cd7d7b042c1bdd2eb6447ead92    
  
author   : Tom Lane <[email protected]>    
date     : Thu, 9 Apr 2020 15:38:43 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Thu, 9 Apr 2020 15:38:43 -0400    

Click here for diff

Suppress a probably-meaningless uninitialized-variable warning  
(induced by my previous patch, I'm sorry to say).  
  
Improve mark_hl_fragments()'s test for overlapping cover strings:  
it failed to consider the possibility that the current string is  
strictly within another one.  That's unlikely given the preceding  
splitting into MaxWords fragments, but I don't think it's impossible.  
  
Discussion: https://postgr.es/m/[email protected]  

M src/backend/tsearch/wparser_def.c

Doc: improve documentation about ts_headline() function.

commit   : 12c2b7a37072d991aa15ca453f0cfcb3620d03f6    
  
author   : Tom Lane <[email protected]>    
date     : Thu, 9 Apr 2020 15:11:08 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Thu, 9 Apr 2020 15:11:08 -0400    

Click here for diff

Now that I've had my nose in that code, I thought the docs about  
it left something to be desired.  

M doc/src/sgml/textsearch.sgml

Fix default text search parser's ts_headline code for phrase queries.

commit   : c81de3a8230cc743ba2b013d3cb4414537fa8824    
  
author   : Tom Lane <[email protected]>    
date     : Thu, 9 Apr 2020 13:19:23 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Thu, 9 Apr 2020 13:19:23 -0400    

Click here for diff

This code could produce very poor results when asked to highlight a  
string based on a query using phrase-match operators.  The root cause  
is that hlCover(), which is supposed to find a minimal substring that  
matches the query, was written assuming that word position is not  
significant.  I'm only 95% convinced that its algorithm was correct even  
for plain AND/OR queries; but it definitely fails completely for phrase  
matches, causing it to possibly not identify a cover string at all.  
  
Hence, rewrite hlCover() with a less-tense algorithm that just tries  
all the possible substrings, earlier and shorter ones first.  (This is  
not as bad as it sounds performance-wise, because all of the string  
matching has been done already: the repeated tsquery match checks  
boil down to pointer comparisons.)  
  
Unfortunately, since that approach produces more candidate cover  
strings than before, it also exposes that there were bugs in the  
heuristics in mark_hl_words() for selecting a best cover string.  
Fixes there include:  
* Do not apply the ShortWord filter to words that appear in the query.  
* Remove a misguided optimization for quickly rejecting a cover.  
* Fix order-of-operation bug that could cause computation of a  
wrong figure of merit (poslen) when shortening a cover.  
* Change the preference rule so that candidate headlines that do not  
include their whole cover string (after MaxWords trimming) are lowest  
priority, since they may not actually satisfy the user's query.  
  
This results in some changes in existing regression test cases,  
but they all seem reasonable.  Note in particular that the tests  
involving strings like "1 2 3" were previously being affected by  
the ShortWord filter, masking the normal matching behavior.  
  
Per bug #16345 from Augustinas Jokubauskas; the new test cases are  
based on that example.  Back-patch to 9.6 where phrase search was  
added to tsquery.  
  
Discussion: https://postgr.es/m/[email protected]  

M src/backend/tsearch/wparser_def.c
M src/test/regress/expected/tsearch.out
M src/test/regress/sql/tsearch.sql

Cosmetic improvements for default text search parser's ts_headline code.

commit   : 638519156ef096a0bf30cf017108b2cfa8625313    
  
author   : Tom Lane <[email protected]>    
date     : Thu, 9 Apr 2020 12:37:00 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Thu, 9 Apr 2020 12:37:00 -0400    

Click here for diff

This code was woefully unreadable and under-commented.  Try to improve  
matters by adding comments, using some macros to make complicated  
if-tests more readable, using boolean type where appropriate, etc.  
There are a couple of tiny coding improvements too, but this commit  
includes (I hope) no behavioral change.  
  
Nonetheless, back-patch as far as 9.6, because a followup bug-fixing  
commit depends on this.  
  
Discussion: https://postgr.es/m/[email protected]  

M src/backend/tsearch/wparser_def.c

Fix pg_dump/pg_restore to restore event trigger comments later.

commit   : 7780660520b77b1ce050e63b2ab234068a108ee3    
  
author   : Tom Lane <[email protected]>    
date     : Wed, 8 Apr 2020 11:23:40 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Wed, 8 Apr 2020 11:23:40 -0400    

Click here for diff

Repair an oversight in commit 8728b2c70: if we're postponing restore  
of event triggers to the end, we must also postpone restoring any  
comments on them, since of course we cannot create the comments first.  
(This opens yet another opportunity for an event trigger to bollix  
the restore, but there's no help for that.)  
  
Per bug #16346 from Alexander Lakhin.  
  
Like the previous commit, back-patch to all supported branches.  
  
Hamid Akhtar and Tom Lane  
  
Discussion: https://postgr.es/m/[email protected]  

M src/bin/pg_dump/pg_backup_archiver.c

Fix circle_in to accept "(x,y),r" as it's advertised to do.

commit   : 049e9f48e967767ace15e4f4c36e9acdaa60465f    
  
author   : Tom Lane <[email protected]>    
date     : Tue, 7 Apr 2020 20:50:02 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Tue, 7 Apr 2020 20:50:02 -0400    

Click here for diff

Our documentation describes four allowed input syntaxes for circles,  
but the regression tests tried only three ... with predictable  
consequences.  Remarkably, this has been wrong since the circle  
datatype was added in 1997, but nobody noticed till now.  
  
David Zhang, with some help from me  
  
Discussion: https://postgr.es/m/[email protected]  

M src/backend/utils/adt/geo_ops.c
M src/test/regress/expected/circle.out
M src/test/regress/sql/circle.sql

Adjust bytea get_bit/set_bit to cope with bytea strings > 256MB.

commit   : e40c4d4914fd7e4682ae96ba8b772c96ec5b9414    
  
author   : Tom Lane <[email protected]>    
date     : Tue, 7 Apr 2020 16:30:55 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Tue, 7 Apr 2020 16:30:55 -0400    

Click here for diff

Since the existing bit number argument can't exceed INT32_MAX, it's  
not possible for these functions to manipulate bits beyond the first  
256MB of a bytea value.  However, it'd be good if they could do at  
least that much, and not fall over entirely for longer bytea values.  
Adjust the comparisons to be done in int64 arithmetic so that works.  
Also tweak the error reports to show sane values in case of overflow.  
  
Also add some test cases to improve the miserable code coverage  
of these functions.  
  
Apply patch to back branches only; HEAD has a better solution  
as of commit 26a944cf2.  
  
Extracted from a much larger patch by Movead Li  
  
Discussion: https://postgr.es/m/[email protected]  

M src/backend/utils/adt/varlena.c
M src/test/regress/expected/strings.out
M src/test/regress/sql/strings.sql

Preserve clustered index after rewrites with ALTER TABLE

commit   : 61a161fe44214431b3e74cc820b777519eb4a654    
  
author   : Michael Paquier <[email protected]>    
date     : Mon, 6 Apr 2020 11:06:04 +0900    
  
committer: Michael Paquier <[email protected]>    
date     : Mon, 6 Apr 2020 11:06:04 +0900    

Click here for diff

A table rewritten by ALTER TABLE would lose tracking of an index usable  
for CLUSTER.  This setting is tracked by pg_index.indisclustered and is  
controlled by ALTER TABLE, so some extra work was needed to restore it  
properly.  Note that ALTER TABLE only marks the index that can be used  
for clustering, and does not do the actual operation.  
  
Author: Amit Langote, Justin Pryzby  
Reviewed-by: Ibrar Ahmed, Michael Paquier  
Discussion: https://postgr.es/m/[email protected]  
Backpatch-through: 9.5  

M src/backend/commands/tablecmds.c
M src/backend/utils/cache/lsyscache.c
M src/include/utils/lsyscache.h
M src/test/regress/expected/alter_table.out
M src/test/regress/sql/alter_table.sql

Use TransactionXmin instead of RecentGlobalXmin in heap_abort_speculative().

commit   : f7f55d02c2a1e854f21cde4124453c2b247b701f    
  
author   : Andres Freund <[email protected]>    
date     : Sun, 5 Apr 2020 17:47:30 -0700    
  
committer: Andres Freund <[email protected]>    
date     : Sun, 5 Apr 2020 17:47:30 -0700    

Click here for diff

There's a very low risk that RecentGlobalXmin could be far enough in  
the past to be older than relfrozenxid, or even wrapped  
around. Luckily the consequences of that having happened wouldn't be  
too bad - the page wouldn't be pruned for a while.  
  
Avoid that risk by using TransactionXmin instead. As that's announced  
via MyPgXact->xmin, it is protected against wrapping around (see code  
comments for details around relfrozenxid).  
  
Author: Andres Freund  
Discussion: https://postgr.es/m/[email protected]  
Backpatch: 9.5-  

M src/backend/access/heap/heapam.c

Save errno across LWLockRelease() calls

commit   : 3dcaea4b007afb326616855824f32f54bfc1fe5d    
  
author   : Peter Eisentraut <[email protected]>    
date     : Sun, 5 Apr 2020 10:02:00 +0200    
  
committer: Peter Eisentraut <[email protected]>    
date     : Sun, 5 Apr 2020 10:02:00 +0200    

Click here for diff

Fixup for "Drop slot's LWLock before returning from SaveSlotToPath()"  
  
Reported-by: Michael Paquier <[email protected]>  

M src/backend/replication/slot.c

Fix bugs in gin_fuzzy_search_limit processing.

commit   : 49b0d13d7646bc3c5af2e98772ddca493b4b86ea    
  
author   : Tom Lane <[email protected]>    
date     : Fri, 3 Apr 2020 13:15:30 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Fri, 3 Apr 2020 13:15:30 -0400    

Click here for diff

entryGetItem()'s three code paths each contained bugs associated  
with filtering the entries for gin_fuzzy_search_limit.  
  
The posting-tree path failed to advance "advancePast" after having  
decided to filter an item.  If we ran out of items on the current  
page and needed to advance to the next, what would actually happen  
is that entryLoadMoreItems() would re-load the same page.  Eventually,  
the random dropItem() test would accept one of the same items it'd  
previously rejected, and we'd move on --- but it could take awhile  
with small gin_fuzzy_search_limit.  To add insult to injury, this  
case would inevitably cause entryLoadMoreItems() to decide it needed  
to re-descend from the root, making things even slower.  
  
The posting-list path failed to implement gin_fuzzy_search_limit  
filtering at all, so that all entries in the posting list would  
be returned.  
  
The bitmap-result path used a "gotitem" variable that it failed to  
update in the one place where it'd actually make a difference, ie  
at the one "continue" statement.  I think this was unreachable in  
practice, because if we'd looped around then it shouldn't be the  
case that the entries on the new page are before advancePast.  
Still, the "gotitem" variable was contributing nothing to either  
clarity or correctness, so get rid of it.  
  
Refactor all three loops so that the termination conditions are  
more alike and less unreadable.  
  
The code coverage report showed that we had no coverage at all for  
the re-descend-from-root code path in entryLoadMoreItems(), which  
seems like a very bad thing, so add a test case that exercises it.  
We also had exactly no coverage for gin_fuzzy_search_limit, so add a  
simplistic test case that at least hits those code paths a little bit.  
  
Back-patch to all supported branches.  
  
Adé Heyward and Tom Lane  
  
Discussion: https://postgr.es/m/CAEknJCdS-dE1Heddptm7ay2xTbSeADbkaQ8bU2AXRCVC2LdtKQ@mail.gmail.com  

M src/backend/access/gin/ginget.c
M src/test/regress/expected/gin.out
M src/test/regress/sql/gin.sql

Fix bogus CALLED_AS_TRIGGER() defenses.

commit   : a9f821f48893308fbb5533a1b722c233eaa2d603    
  
author   : Tom Lane <[email protected]>    
date     : Fri, 3 Apr 2020 11:24:56 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Fri, 3 Apr 2020 11:24:56 -0400    

Click here for diff

contrib/lo's lo_manage() thought it could use  
trigdata->tg_trigger->tgname in its error message about  
not being called as a trigger.  That naturally led to a core dump.  
  
unique_key_recheck() figured it could Assert that fcinfo->context  
is a TriggerData node in advance of having checked that it's  
being called as a trigger.  That's harmless in production builds,  
and perhaps not that easy to reach in any case, but it's logically  
wrong.  
  
The first of these per bug #16340 from William Crowell;  
the second from manual inspection of other CALLED_AS_TRIGGER  
call sites.  
  
Back-patch the lo.c change to all supported branches, the  
other to v10 where the thinko crept in.  
  
Discussion: https://postgr.es/m/[email protected]  

M contrib/lo/lo.c

doc: remove unnecessary INNER keyword

commit   : 68ef3037e4910ad95d80351b36c8f23f3e283121    
  
author   : Bruce Momjian <[email protected]>    
date     : Thu, 2 Apr 2020 17:42:09 -0400    
  
committer: Bruce Momjian <[email protected]>    
date     : Thu, 2 Apr 2020 17:42:09 -0400    

Click here for diff

A join that was added in commit 9b2009c4cf that did not use the INNER  
keyword but the existing query used it.  It was cleaner to remove the  
existing INNER keyword.  
  
Reported-by: Peter Eisentraut  
  
Discussion: https://postgr.es/m/[email protected]  
  
Backpatch-through: 9.5  

M doc/src/sgml/pgbuffercache.sgml

commit   : bd2cfe40f841d355c42dbf4a6ced35ca88bf6e23    
  
author   : Bruce Momjian <[email protected]>    
date     : Thu, 2 Apr 2020 17:27:42 -0400    
  
committer: Bruce Momjian <[email protected]>    
date     : Thu, 2 Apr 2020 17:27:42 -0400    

Click here for diff

Reported-by: Peter Eisentraut  
  
Discussion: https://postgr.es/m/[email protected]  
  
Backpatch-through: 9.5  

M doc/src/sgml/func.sgml

doc: remove mention of bitwise operators as solely type-limited

commit   : e58d283ba9332e33c24f765f28dd7a312012bd12    
  
author   : Bruce Momjian <[email protected]>    
date     : Tue, 31 Mar 2020 18:44:29 -0400    
  
committer: Bruce Momjian <[email protected]>    
date     : Tue, 31 Mar 2020 18:44:29 -0400    

Click here for diff

There are other operators that have limited number data type support, so  
just remove the sentence.  
  
Reported-by: Sergei Agalakov  
  
Discussion: https://postgr.es/m/[email protected]  
  
Backpatch-through: 9.5  

M doc/src/sgml/func.sgml

doc: clarify hierarchy of objects: global, db, schema, etc.

commit   : d797c1e1f496cd7c03c0c019847f63ca3d9835bf    
  
author   : Bruce Momjian <[email protected]>    
date     : Tue, 31 Mar 2020 18:10:39 -0400    
  
committer: Bruce Momjian <[email protected]>    
date     : Tue, 31 Mar 2020 18:10:39 -0400    

Click here for diff

The previous wording was confusing because it wasn't in decreasing order  
and had to backtrack.  Also clarify role/user wording.  
  
Reported-by: [email protected]  
  
Discussion: https://postgr.es/m/[email protected]  
  
Backpatch-through: 9.5  

M doc/src/sgml/ddl.sgml
M doc/src/sgml/manage-ag.sgml

doc: restore wording from recent patch "rolled back to"

commit   : 43e0c388cf9b61d3215fe6570384230e8a2c8c11    
  
author   : Bruce Momjian <[email protected]>    
date     : Tue, 31 Mar 2020 17:52:48 -0400    
  
committer: Bruce Momjian <[email protected]>    
date     : Tue, 31 Mar 2020 17:52:48 -0400    

Click here for diff

Reported-by: Tom Lane  
  
Discussion: https://postgr.es/m/[email protected]  
  
Backpatch-through: 9.5 - 12  

M doc/src/sgml/mvcc.sgml

doc: clarify when row-level locks are released

commit   : 6e727a13cbc189e5974c3e8f6fa3eff9f87d1417    
  
author   : Bruce Momjian <[email protected]>    
date     : Tue, 31 Mar 2020 17:27:32 -0400    
  
committer: Bruce Momjian <[email protected]>    
date     : Tue, 31 Mar 2020 17:27:32 -0400    

Click here for diff

They are released just like table-level locks.  Also clean up wording.  
  
Reported-by: [email protected]  
  
Discussion: https://postgr.es/m/[email protected]  
  
Backpatch-through: 9.5  

M doc/src/sgml/mvcc.sgml

doc: add namespace column to pg_buffercache example query

commit   : ce5d82f2d0fd160dfc3d52cff7ddc2490959b3f7    
  
author   : Bruce Momjian <[email protected]>    
date     : Tue, 31 Mar 2020 17:16:33 -0400    
  
committer: Bruce Momjian <[email protected]>    
date     : Tue, 31 Mar 2020 17:16:33 -0400    

Click here for diff

Without the namespace, the table name could be ambiguous.  
  
Reported-by: [email protected]  
  
Discussion: https://postgr.es/m/[email protected]  
  
Backpatch-through: 9.5  

M doc/src/sgml/pgbuffercache.sgml

doc: adjust UPDATE/DELETE's FROM/USING to match SELECT's FROM

commit   : f40f44f1e7e70ca235c9b079e9849ee352449be8    
  
author   : Bruce Momjian <[email protected]>    
date     : Tue, 31 Mar 2020 16:31:44 -0400    
  
committer: Bruce Momjian <[email protected]>    
date     : Tue, 31 Mar 2020 16:31:44 -0400    

Click here for diff

Previously the syntax and wording were unclear.  
  
Reported-by: Alexey Bashtanov  
  
Discussion: https://postgr.es/m/[email protected]  
  
Backpatch-through: 9.5  

M doc/src/sgml/ref/delete.sgml
M doc/src/sgml/ref/update.sgml

Back-patch addition of stack overflow and interrupt checks for lquery.

commit   : e48ff22d39dbe2629e8ee50b11c7bc041f4fac76    
  
author   : Tom Lane <[email protected]>    
date     : Tue, 31 Mar 2020 11:37:44 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Tue, 31 Mar 2020 11:37:44 -0400    

Click here for diff

Experimentation shows that it's not hard at all to drive the  
old implementation of "ltree ~ lquery" match to stack overflow,  
so throw in a check_stack_depth() call, as I just did in HEAD.  
  
I wasn't able to make it take a long time, because all the  
pathological cases I tried hit stack overflow first; but  
I bet there are some others that do take a long time, so add  
CHECK_FOR_INTERRUPTS() too.  
  
Discussion: https://postgr.es/m/CAP_rww=waX2Oo6q+MbMSiZ9ktdj6eaJj0cQzNu=Ry2cCDij5fw@mail.gmail.com  

M contrib/ltree/lquery_op.c

Be more careful about extracting encoding from locale strings on Windows.

commit   : f15f5edee5b40812b5ac3e4cf431a507a4991b5e    
  
author   : Tom Lane <[email protected]>    
date     : Mon, 30 Mar 2020 11:14:58 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Mon, 30 Mar 2020 11:14:58 -0400    

Click here for diff

GetLocaleInfoEx() can fail on strings that setlocale() was perfectly  
happy with.  A common way for that to happen is if the locale string  
is actually a Unix-style string, say "et_EE.UTF-8".  In that case,  
what's after the dot is an encoding name, not a Windows codepage number;  
blindly treating it as a codepage number led to failure, with a fairly  
silly error message.  Hence, check to see if what's after the dot is  
all digits, and if not, treat it as a literal encoding name rather than  
a codepage number.  This will do the right thing with many Unix-style  
locale strings, and produce a more sensible error message otherwise.  
  
Somewhat independently of that, treat a zero (CP_ACP) result from  
GetLocaleInfoEx() as meaning that we must use UTF-8 encoding.  
  
Back-patch to all supported branches.  
  
Juan José Santamaría Flecha  
  
Discussion: https://postgr.es/m/[email protected]  

M src/port/chklocale.c

Doc: correct misstatement about ltree label maximum length.

commit   : a9120b0163f308b0a20ac473cc45499991e4e32f    
  
author   : Tom Lane <[email protected]>    
date     : Sun, 29 Mar 2020 18:54:19 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Sun, 29 Mar 2020 18:54:19 -0400    

Click here for diff

The documentation says that the max length is 255 bytes, but  
code inspection says it's actually 255 characters; and relevant  
lengths are stored as uint16 so that that works.  

M doc/src/sgml/ltree.sgml

Protect against overflow of ltree.numlevel and lquery.numlevel.

commit   : 39491aa0da48efabea5f16eb5104a0eb0ae0b251    
  
author   : Tom Lane <[email protected]>    
date     : Sat, 28 Mar 2020 17:09:51 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Sat, 28 Mar 2020 17:09:51 -0400    

Click here for diff

These uint16 fields could be overflowed by excessively long input,  
producing strange results.  Complain for invalid input.  
  
Likewise check for out-of-range values of the repeat counts in lquery.  
(We don't try too hard on that one, notably not bothering to detect  
if atoi's result has overflowed.)  
  
Also detect length overflow in ltree_concat.  
  
In passing, be more consistent about whether "syntax error" messages  
include the type name.  Also, clarify the documentation about what  
the size limit is.  
  
This has been broken for a long time, so back-patch to all supported  
branches.  
  
Nikita Glukhov, reviewed by Benjie Gillam and Tomas Vondra  
  
Discussion: https://postgr.es/m/CAP_rww=waX2Oo6q+MbMSiZ9ktdj6eaJj0cQzNu=Ry2cCDij5fw@mail.gmail.com  

M contrib/ltree/expected/ltree.out
M contrib/ltree/ltree.h
M contrib/ltree/ltree_io.c
M contrib/ltree/ltree_op.c
M contrib/ltree/sql/ltree.sql
M doc/src/sgml/ltree.sgml

Ensure snapshot is registered within ScanPgRelation().

commit   : 211d8f65392f7add35bcd02f49648e514d9558fc    
  
author   : Andres Freund <[email protected]>    
date     : Sat, 28 Mar 2020 11:52:11 -0700    
  
committer: Andres Freund <[email protected]>    
date     : Sat, 28 Mar 2020 11:52:11 -0700    

Click here for diff

In 9.4 I added support to use a historical snapshot in  
ScanPgRelation(), while adding logical decoding. Unfortunately a  
conflict with the concurrent removal of SnapshotNow was incorrectly  
resolved, leading to an unregistered snapshot being used.  
  
It is not correct to use an unregistered (or non-active) snapshot for  
anything non-trivial, because catalog invalidations can cause the  
snapshot to be invalidated.  
  
Luckily it seems unlikely to actively cause problems in practice, as  
ScanPgRelation() requires that we already have a lock on the relation,  
we only look for a single row, and we don't appear to rely on the  
result's tid to be correct. It however is clearly wrong and potential  
negative consequences would likely be hard to find. So it seems worth  
backpatching the fix, even without a concrete hazard.  
  
Discussion: https://postgr.es/m/[email protected]  
Backpatch: 9.5-  

M src/backend/utils/cache/relcache.c

Ensure that plpgsql cleans up cleanly during parallel-worker exit.

commit   : dd51b5696aa55a5bf46656bf2d89cbf101d598d3    
  
author   : Tom Lane <[email protected]>    
date     : Thu, 26 Mar 2020 18:06:55 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Thu, 26 Mar 2020 18:06:55 -0400    

Click here for diff

plpgsql_xact_cb ought to treat events XACT_EVENT_PARALLEL_COMMIT and  
XACT_EVENT_PARALLEL_ABORT like XACT_EVENT_COMMIT and XACT_EVENT_ABORT  
respectively, since its goal is to do process-local cleanup.  This  
oversight caused plpgsql's end-of-transaction cleanup to not get done  
in parallel workers.  Since a parallel worker will exit just after the  
transaction cleanup, the effects of this are limited.  I couldn't find  
any case in the core code with user-visible effects, but perhaps there  
are some in extensions.  In any case it's wrong, so let's fix it before  
it bites us not after.  
  
In passing, add some comments around the handling of expression  
evaluation resources in DO blocks.  There's no live bug there, but it's  
quite unobvious what's happening; at least I thought so.  This isn't  
related to the other issue, except that I found both things while poking  
at expression-evaluation performance.  
  
Back-patch the plpgsql_xact_cb fix to 9.5 where those event types  
were introduced, and the DO-block commentary to v11 where DO blocks  
gained the ability to issue COMMIT/ROLLBACK.  
  
Discussion: https://postgr.es/m/[email protected]  

M src/pl/plpgsql/src/pl_exec.c

Drop slot's LWLock before returning from SaveSlotToPath()

commit   : 2d8597ba66a1646e353c0ff755b4b0b85cd1747f    
  
author   : Peter Eisentraut <[email protected]>    
date     : Thu, 26 Mar 2020 11:51:39 +0100    
  
committer: Peter Eisentraut <[email protected]>    
date     : Thu, 26 Mar 2020 11:51:39 +0100    

Click here for diff

When SaveSlotToPath() is called with elevel=LOG, the early exits didn't  
release the slot's io_in_progress_lock.  
  
This could result in a walsender being stuck on the lock forever.  A  
possible way to get into this situation is if the offending code paths  
are triggered in a low disk space situation.  
  
Author: Pavan Deolasee <[email protected]>  
Reported-by: Craig Ringer <[email protected]>  
Discussion: https://www.postgresql.org/message-id/flat/56a138c5-de61-f553-7e8f-6789296de785%402ndquadrant.com  

M src/backend/replication/slot.c

Doc: explain that LIKE et al can be used in ANY (sub-select) etc.

commit   : ef7f01a50489efdf5f6fd2f352853d2deb6c3e5e    
  
author   : Tom Lane <[email protected]>    
date     : Mon, 23 Mar 2020 12:42:16 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Mon, 23 Mar 2020 12:42:16 -0400    

Click here for diff

This wasn't stated anywhere, and it's perhaps not that obvious,  
since we get questions about it from time to time.  Also undocumented  
was that the parser actually translates these into operators.  
  
Discussion: https://postgr.es/m/CAFj8pRBkvZ71BqGKZnBBG4=0cKG+s50Dy+DYmrizUKEpAtdc+w@mail.gmail.com  

M doc/src/sgml/func.sgml

Fix our getopt_long's behavior for a command line argument of just "-".

commit   : c0eb57dd989b7f4c2faf486a39c83dd8a4ae4189    
  
author   : Tom Lane <[email protected]>    
date     : Mon, 23 Mar 2020 11:58:01 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Mon, 23 Mar 2020 11:58:01 -0400    

Click here for diff

src/port/getopt_long.c failed on such an argument, always seeing it  
as an unrecognized switch.  This is unhelpful; better is to treat such  
an item as a non-switch argument.  That behavior is what we find in  
GNU's getopt_long(); it's what src/port/getopt.c does; and it is  
required by POSIX for getopt(), which getopt_long() ought to be  
generally a superset of.  Moreover, it's expected by ecpg, which  
intends an argument of "-" to mean "read from stdin".  So fix it.  
  
Also add some documentation about ecpg's behavior in this area, since  
that was miserably underdocumented.  I had to reverse-engineer it  
from the code.  
  
Per bug #16304 from James Gray.  Back-patch to all supported branches,  
since this has been broken forever.  
  
Discussion: https://postgr.es/m/[email protected]  

M doc/src/sgml/ref/ecpg-ref.sgml
M src/port/getopt_long.c

Doc: Fix type of some storage parameters in CREATE TABLE page

commit   : ce5ed3806ec69a304be208d86047cc4008a1ab8f    
  
author   : Michael Paquier <[email protected]>    
date     : Mon, 23 Mar 2020 13:38:30 +0900    
  
committer: Michael Paquier <[email protected]>    
date     : Mon, 23 Mar 2020 13:38:30 +0900    

Click here for diff

autovacuum_vacuum_scale_factor and autovacuum_analyze_scale_factor have  
been documented as "float4", but "floating type" is used in this case  
for GUCs and relation options in the documentation.  
  
Author: Atsushi Torikoshi  
Discussion: https://postgr.es/m/CACZ0uYFf_p9BpbjLccx3CA=eM1Hk2Te=ULY4iptGLUhL-JxCPA@mail.gmail.com  
Backpatch-through: 9.5  

M doc/src/sgml/ref/create_table.sgml

Revert "Skip WAL for new relfilenodes, under wal_level=minimal."

commit   : 348f15e22e9456bf53bba1a1ca4e2279fb3e507a    
  
author   : Noah Misch <[email protected]>    
date     : Sun, 22 Mar 2020 09:24:09 -0700    
  
committer: Noah Misch <[email protected]>    
date     : Sun, 22 Mar 2020 09:24:09 -0700    

Click here for diff

This reverts commit cb2fd7eac285b1b0a24eeb2b8ed4456b66c5a09f.  Per  
numerous buildfarm members, it was incompatible with parallel query, and  
a test case assumed LP64.  Back-patch to 9.5 (all supported versions).  
  
Discussion: https://postgr.es/m/[email protected]  

M doc/src/sgml/config.sgml
M doc/src/sgml/perform.sgml
M src/backend/access/gist/gistbuild.c
M src/backend/access/gist/gistutil.c
M src/backend/access/gist/gistxlog.c
M src/backend/access/heap/heapam.c
M src/backend/access/heap/rewriteheap.c
M src/backend/access/nbtree/nbtsort.c
M src/backend/access/rmgrdesc/gistdesc.c
M src/backend/access/transam/README
M src/backend/access/transam/xact.c
M src/backend/access/transam/xlogutils.c
M src/backend/bootstrap/bootparse.y
M src/backend/catalog/storage.c
M src/backend/commands/cluster.c
M src/backend/commands/copy.c
M src/backend/commands/createas.c
M src/backend/commands/matview.c
M src/backend/commands/tablecmds.c
M src/backend/nodes/copyfuncs.c
M src/backend/nodes/equalfuncs.c
M src/backend/nodes/outfuncs.c
M src/backend/parser/gram.y
M src/backend/parser/parse_utilcmd.c
M src/backend/storage/buffer/bufmgr.c
M src/backend/storage/lmgr/lock.c
M src/backend/storage/smgr/md.c
M src/backend/storage/smgr/smgr.c
M src/backend/utils/cache/relcache.c
M src/backend/utils/misc/guc.c
M src/backend/utils/misc/postgresql.conf.sample
M src/include/access/gist_private.h
M src/include/access/heapam.h
M src/include/access/rewriteheap.h
M src/include/catalog/storage.h
M src/include/nodes/parsenodes.h
M src/include/storage/bufmgr.h
M src/include/storage/lock.h
M src/include/storage/smgr.h
M src/include/utils/rel.h
M src/include/utils/relcache.h
D src/test/recovery/t/018_wal_optimize.pl
M src/test/regress/expected/alter_table.out
M src/test/regress/expected/create_table.out
M src/test/regress/sql/alter_table.sql
M src/test/regress/sql/create_table.sql

Skip WAL for new relfilenodes, under wal_level=minimal.

commit   : a653bd8aa76e7c734388cc39663f45f9c8483b0f    
  
author   : Noah Misch <[email protected]>    
date     : Sat, 21 Mar 2020 09:38:26 -0700    
  
committer: Noah Misch <[email protected]>    
date     : Sat, 21 Mar 2020 09:38:26 -0700    

Click here for diff

Until now, only selected bulk operations (e.g. COPY) did this.  If a  
given relfilenode received both a WAL-skipping COPY and a WAL-logged  
operation (e.g. INSERT), recovery could lose tuples from the COPY.  See  
src/backend/access/transam/README section "Skipping WAL for New  
RelFileNode" for the new coding rules.  Maintainers of table access  
methods should examine that section.  
  
To maintain data durability, just before commit, we choose between an  
fsync of the relfilenode and copying its contents to WAL.  A new GUC,  
wal_skip_threshold, guides that choice.  If this change slows a workload  
that creates small, permanent relfilenodes under wal_level=minimal, try  
adjusting wal_skip_threshold.  Users setting a timeout on COMMIT may  
need to adjust that timeout, and log_min_duration_statement analysis  
will reflect time consumption moving to COMMIT from commands like COPY.  
  
Internally, this requires a reliable determination of whether  
RollbackAndReleaseCurrentSubTransaction() would unlink a relation's  
current relfilenode.  Introduce rd_firstRelfilenodeSubid.  Amend the  
specification of rd_createSubid such that the field is zero when a new  
rel has an old rd_node.  Make relcache.c retain entries for certain  
dropped relations until end of transaction.  
  
Back-patch to 9.5 (all supported versions).  This introduces a new WAL  
record type, XLOG_GIST_ASSIGN_LSN, without bumping XLOG_PAGE_MAGIC.  As  
always, update standby systems before master systems.  This changes  
sizeof(RelationData) and sizeof(IndexStmt), breaking binary  
compatibility for affected extensions.  (The most recent commit to  
affect the same class of extensions was  
089e4d405d0f3b94c74a2c6a54357a84a681754b.)  
  
Kyotaro Horiguchi, reviewed (in earlier, similar versions) by Robert  
Haas.  Heikki Linnakangas and Michael Paquier implemented earlier  
designs that materially clarified the problem.  Reviewed, in earlier  
designs, by Andrew Dunstan, Andres Freund, Alvaro Herrera, Tom Lane,  
Fujii Masao, and Simon Riggs.  Reported by Martijn van Oosterhout.  
  
Discussion: https://postgr.es/m/[email protected]  

M doc/src/sgml/config.sgml
M doc/src/sgml/perform.sgml
M src/backend/access/gist/gistbuild.c
M src/backend/access/gist/gistutil.c
M src/backend/access/gist/gistxlog.c
M src/backend/access/heap/heapam.c
M src/backend/access/heap/rewriteheap.c
M src/backend/access/nbtree/nbtsort.c
M src/backend/access/rmgrdesc/gistdesc.c
M src/backend/access/transam/README
M src/backend/access/transam/xact.c
M src/backend/access/transam/xlogutils.c
M src/backend/bootstrap/bootparse.y
M src/backend/catalog/storage.c
M src/backend/commands/cluster.c
M src/backend/commands/copy.c
M src/backend/commands/createas.c
M src/backend/commands/matview.c
M src/backend/commands/tablecmds.c
M src/backend/nodes/copyfuncs.c
M src/backend/nodes/equalfuncs.c
M src/backend/nodes/outfuncs.c
M src/backend/parser/gram.y
M src/backend/parser/parse_utilcmd.c
M src/backend/storage/buffer/bufmgr.c
M src/backend/storage/lmgr/lock.c
M src/backend/storage/smgr/md.c
M src/backend/storage/smgr/smgr.c
M src/backend/utils/cache/relcache.c
M src/backend/utils/misc/guc.c
M src/backend/utils/misc/postgresql.conf.sample
M src/include/access/gist_private.h
M src/include/access/heapam.h
M src/include/access/rewriteheap.h
M src/include/catalog/storage.h
M src/include/nodes/parsenodes.h
M src/include/storage/bufmgr.h
M src/include/storage/lock.h
M src/include/storage/smgr.h
M src/include/utils/rel.h
M src/include/utils/relcache.h
A src/test/recovery/t/018_wal_optimize.pl
M src/test/regress/expected/alter_table.out
M src/test/regress/expected/create_table.out
M src/test/regress/sql/alter_table.sql
M src/test/regress/sql/create_table.sql

Back-patch log_newpage_range().

commit   : 14d2bb4941e6bdf181f274d81314415781933079    
  
author   : Noah Misch <[email protected]>    
date     : Sat, 21 Mar 2020 09:38:33 -0700    
  
committer: Noah Misch <[email protected]>    
date     : Sat, 21 Mar 2020 09:38:33 -0700    

Click here for diff

Back-patch a subset of commit 9155580fd5fc2a0cbb23376dfca7cd21f59c2c7b  
to v11, v10, 9.6, and 9.5.  Include the latest repairs to this function.  
Use a new XLOG_FPI_MULTI value instead of reusing XLOG_FPI.  That way,  
if an older server reads WAL from this function, that server will PANIC  
instead of applying just one page of the record.  The next commit adds a  
call to this function.  
  
Discussion: https://postgr.es/m/[email protected]  

M src/backend/access/rmgrdesc/xlogdesc.c
M src/backend/access/transam/xlog.c
M src/backend/access/transam/xloginsert.c
M src/backend/replication/logical/decode.c
M src/include/access/xloginsert.h
M src/include/catalog/pg_control.h

During heap rebuild, lock any TOAST index until end of transaction.

commit   : a8f754aea01476641089212f9fff21a74935c370    
  
author   : Noah Misch <[email protected]>    
date     : Sat, 21 Mar 2020 09:38:26 -0700    
  
committer: Noah Misch <[email protected]>    
date     : Sat, 21 Mar 2020 09:38:26 -0700    

Click here for diff

swap_relation_files() calls toast_get_valid_index() to find and lock  
this index, just before swapping with the rebuilt TOAST index.  The  
latter function releases the lock before returning.  Potential for  
mischief is low; a concurrent session can issue ALTER INDEX ... SET  
(fillfactor = ...), which is not alarming.  Nonetheless, changing  
pg_class.relfilenode without a lock is unconventional.  Back-patch to  
9.5 (all supported versions), because another fix needs this.  
  
Discussion: https://postgr.es/m/[email protected]  

M src/backend/access/heap/tuptoaster.c
M src/backend/commands/cluster.c

Fix cosmetic blemishes involving rd_createSubid.

commit   : 909fbf10528c13b273ce0c5116223a3da082dcef    
  
author   : Noah Misch <[email protected]>    
date     : Sat, 21 Mar 2020 09:38:26 -0700    
  
committer: Noah Misch <[email protected]>    
date     : Sat, 21 Mar 2020 09:38:26 -0700    

Click here for diff

Remove an obsolete comment from AtEOXact_cleanup().  Restore formatting  
of a comment in struct RelationData, mangled by the pgindent run in  
commit 9af4159fce6654aa0e081b00d02bca40b978745c.  Back-patch to 9.5 (all  
supported versions), because another fix stacks on this.  

M src/backend/utils/cache/relcache.c
M src/include/utils/rel.h

docs: use alias in WHERE clause of full text search example

commit   : 1228b2af8e300ab66228ac8fdfac5262a122bcaf    
  
author   : Bruce Momjian <[email protected]>    
date     : Fri, 20 Mar 2020 20:19:32 -0400    
  
committer: Bruce Momjian <[email protected]>    
date     : Fri, 20 Mar 2020 20:19:32 -0400    

Click here for diff

The current doc query specified an alias in the FROM clause and used in  
it the target list, but not in the WHERE clause.  
  
Reported-by: [email protected]  
  
Discussion: https://postgr.es/m/[email protected]  
  
Backpatch-through: 9.5  

M doc/src/sgml/textsearch.sgml

Turn off deprecated bison warnings under MSVC

commit   : 80370836f7563653390065b225ece4305aba3d57    
  
author   : Andrew Dunstan <[email protected]>    
date     : Fri, 20 Mar 2020 13:55:15 -0400    
  
committer: Andrew Dunstan <[email protected]>    
date     : Fri, 20 Mar 2020 13:55:15 -0400    

Click here for diff

These are disabled by the configure code, so this is just fixing an  
inconsistency in the MSVC code.  
  
Backpatch to all live branches.  

M src/tools/msvc/pgbison.pl

pg_upgrade: make get_major_server_version() err msg consistent

commit   : 7df528312d10907aa79fb7c230e54cfcba9f4329    
  
author   : Bruce Momjian <[email protected]>    
date     : Thu, 19 Mar 2020 15:20:55 -0400    
  
committer: Bruce Momjian <[email protected]>    
date     : Thu, 19 Mar 2020 15:20:55 -0400    

Click here for diff

This patch fixes the error message in get_major_server_version() to be  
"could not parse version file", and uses the full file path name, rather  
than just the data directory path.  
  
Also, commit 4109bb5de4 added the cause of the failure to the  "could  
not open" error message, and improved quoting.  This patch backpatches  
the "could not open" cause to PG 12, where it was first widely used, and  
backpatches the quoting fix in that patch to all supported releases.  
  
Reported-by: Tom Lane  
  
Discussion: https://postgr.es/m/[email protected]  
  
Author: Dagfinn Ilmari Mannsåker  
  
Backpatch-through: 9.5  

M src/bin/pg_upgrade/server.c

Add missing errcode() in a few ereport calls.

commit   : fe27ce1c136d191b46717fda55b267a2d26f806c    
  
author   : Amit Kapila <[email protected]>    
date     : Wed, 18 Mar 2020 10:08:56 +0530    
  
committer: Amit Kapila <[email protected]>    
date     : Wed, 18 Mar 2020 10:08:56 +0530    

Click here for diff

This will allow to specifying SQLSTATE error code for the errors in the  
missing places.  
  
Reported-by: Sawada Masahiko  
Author: Sawada Masahiko  
Backpatch-through: 9.5  
Discussion: https://postgr.es/m/CA+fd4k6N8EjNvZpM8nme+y+05mz-SM8Z_BgkixzkA34R+ej0Kw@mail.gmail.com  

M contrib/adminpack/adminpack.c
M src/backend/storage/page/bufpage.c

Doc: clarify behavior of "anyrange" pseudo-type.

commit   : 9a9b87191a32fb97dbd9cad6d9a8a43a9fc31c16    
  
author   : Tom Lane <[email protected]>    
date     : Tue, 17 Mar 2020 15:05:17 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Tue, 17 Mar 2020 15:05:17 -0400    

Click here for diff

I noticed that we completely failed to document the restriction  
that an "anyrange" result type has to be inferred from an "anyrange"  
input.  The docs also were less clear than they could be about the  
relationship between "anyrange" and "anyarray".  
  
It's been like this all along, so back-patch.  

M doc/src/sgml/extend.sgml

Avoid holding a directory FD open across assorted SRF calls.

commit   : cd6a0518794d939ed6a716c1a13ead2900b11d50    
  
author   : Tom Lane <[email protected]>    
date     : Mon, 16 Mar 2020 21:05:29 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Mon, 16 Mar 2020 21:05:29 -0400    

Click here for diff

This extends the fixes made in commit 085b6b667 to other SRFs with the  
same bug, namely pg_logdir_ls(), pgrowlocks(), pg_timezone_names(),  
pg_ls_dir(), and pg_tablespace_databases().  
  
Also adjust various comments and documentation to warn against  
expecting to clean up resources during a ValuePerCall SRF's final  
call.  
  
Back-patch to all supported branches, since these functions were  
all born broken.  
  
Justin Pryzby, with cosmetic tweaks by me  
  
Discussion: https://postgr.es/m/[email protected]  

M contrib/adminpack/adminpack.c
M contrib/pgrowlocks/pgrowlocks.c
M doc/src/sgml/xfunc.sgml
M src/backend/utils/adt/datetime.c
M src/backend/utils/adt/genfile.c
M src/backend/utils/adt/misc.c
M src/backend/utils/fmgr/README
M src/include/funcapi.h
M src/test/regress/expected/misc_functions.out
M src/test/regress/sql/misc_functions.sql

Plug memory leak

commit   : 7984c7e9fcd9468007c3ac51ba65f9642ba4dc4b    
  
author   : Alvaro Herrera <[email protected]>    
date     : Mon, 16 Mar 2020 16:27:13 -0300    
  
committer: Alvaro Herrera <[email protected]>    
date     : Mon, 16 Mar 2020 16:27:13 -0300    

Click here for diff

Introduced by b08dee24a557.  Noted by Coverity.  

M src/bin/pg_dump/pg_dump.c

C comment: correct commented bytes of max_cached_tuplebufs

commit   : b83da9e6ee4b4445a3c62bcd5d2da16de7e4bd70    
  
author   : Bruce Momjian <[email protected]>    
date     : Sat, 14 Mar 2020 17:36:54 -0400    
  
committer: Bruce Momjian <[email protected]>    
date     : Sat, 14 Mar 2020 17:36:54 -0400    

Click here for diff

The comment said ~8MB, but it is actually ~64MB.  
  
Reported-by: Kuntal Ghosh  
  
Discussion: https://postgr.es/m/CAGz5QC+GGmHdnxp04B6wcLz2Zcd_HU+wCBrsPyOZP62-BJghig@mail.gmail.com  
  
Backpatch-through: 9.5-10  

M src/backend/replication/logical/reorderbuffer.c

Restructure polymorphic-type resolution in funcapi.c.

commit   : 30e491653b2438403995d06e1f03fc2a3994c5a4    
  
author   : Tom Lane <[email protected]>    
date     : Sat, 14 Mar 2020 14:42:22 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Sat, 14 Mar 2020 14:42:22 -0400    

Click here for diff

resolve_polymorphic_tupdesc() and resolve_polymorphic_argtypes() failed to  
cover the case of having to resolve anyarray given only an anyrange input.  
The bug was masked if anyelement was also used (as either input or  
output), which probably helps account for our not having noticed.  
  
While looking at this I noticed that resolve_generic_type() would produce  
the wrong answer if asked to make that same resolution.  ISTM that  
resolve_generic_type() is confusingly defined and overly complex, so  
rather than fix it, let's just make funcapi.c do the specific lookups  
it requires for itself.  
  
With this change, resolve_generic_type() is not used anywhere, so remove  
it in HEAD.  In the back branches, leave it alone (complete with bug)  
just in case any external code is using it.  
  
While we're here, make some other refactoring adjustments in funcapi.c  
with an eye to upcoming future expansion of the set of polymorphic types:  
  
* Simplify quick-exit tests by adding an overall have_polymorphic_result  
flag.  This is about a wash now but will be a win when there are more  
flags.  
  
* Reduce duplication of code between resolve_polymorphic_tupdesc() and  
resolve_polymorphic_argtypes().  
  
* Don't bother to validate correct matching of anynonarray or anyenum;  
the parser should have done that, and even if it didn't, just doing  
"return false" here would lead to a very confusing, off-point error  
message.  (Really, "return false" in these two functions should only  
occur if the call_expr isn't supplied or we can't obtain data type  
info from it.)  
  
* For the same reason, throw an elog rather than "return false" if  
we fail to resolve a polymorphic type.  
  
The bug's been there since we added anyrange, so back-patch to  
all supported branches.  
  
Discussion: https://postgr.es/m/[email protected]  

M src/backend/utils/fmgr/funcapi.c
M src/test/regress/expected/rangetypes.out
M src/test/regress/sql/rangetypes.sql

Preserve replica identity index across ALTER TABLE rewrite

commit   : 2f0dd9d93efe0d2e41585f804a38b2db5b7f429d    
  
author   : Peter Eisentraut <[email protected]>    
date     : Fri, 13 Mar 2020 11:28:11 +0100    
  
committer: Peter Eisentraut <[email protected]>    
date     : Fri, 13 Mar 2020 11:28:11 +0100    

Click here for diff

If an index was explicitly set as replica identity index, this setting  
was lost when a table was rewritten by ALTER TABLE.  Because this  
setting is part of pg_index but actually controlled by ALTER  
TABLE (not part of CREATE INDEX, say), we have to do some extra work  
to restore it.  
  
Based-on-patch-by: Quan Zongliang <[email protected]>  
Reviewed-by: Euler Taveira <[email protected]>  
Discussion: https://www.postgresql.org/message-id/flat/[email protected]  

M src/backend/commands/tablecmds.c
M src/backend/utils/cache/lsyscache.c
M src/include/utils/lsyscache.h
M src/test/regress/expected/replica_identity.out
M src/test/regress/sql/replica_identity.sql

Fix nextXid tracking bug on standbys (9.5-11 only).

commit   : 4e8cad2da36adff877c81d8c336d7c28ed19ebae    
  
author   : Thomas Munro <[email protected]>    
date     : Thu, 12 Mar 2020 18:06:54 +1300    
  
committer: Thomas Munro <[email protected]>    
date     : Thu, 12 Mar 2020 18:06:54 +1300    

Click here for diff

RecordKnownAssignedTransactionIds() should never move  
nextXid backwards.  Before this commit, that could happen  
if some other code path had advanced it without advancing  
latestObservedXid.  
  
One consequence is that a well timed XLOG_CHECKPOINT_ONLINE  
could cause hot standby feedback messages to get confused  
and report an xmin from a future epoch, potentially allowing  
vacuum to run too soon on the primary.  
  
Repair, by making sure RecordKnownAssignedTransactionIds()  
can only move nextXid forwards.  
  
In release 12 and master, this was already done by commit  
2fc7af5e, which consolidated similar code and straightened  
out this bug.  Back-patch to supported releases before that.  
  
Author: Eka Palamadai <[email protected]>  
Discussion: https://postgr.es/m/[email protected]  

M src/backend/storage/ipc/procarray.c

Add pg_dump support for ALTER obj DEPENDS ON EXTENSION

commit   : 2b9d70159154a5ff6eb2d6f09db6f8da433328aa    
  
author   : Alvaro Herrera <[email protected]>    
date     : Wed, 11 Mar 2020 16:54:54 -0300    
  
committer: Alvaro Herrera <[email protected]>    
date     : Wed, 11 Mar 2020 16:54:54 -0300    

Click here for diff

pg_dump is oblivious to this kind of dependency, so they're lost on  
dump/restores (and pg_upgrade).  Have pg_dump emit ALTER lines so that  
they're preserved.  Add some pg_dump tests for the whole thing, also.  
  
Reviewed-by: Tom Lane (offlist)  
Reviewed-by: Ibrar Ahmed  
Reviewed-by: Ahsan Hadi (who also reviewed commit 899a04f5ed61)  
Discussion: https://postgr.es/m/[email protected]  

M src/bin/pg_dump/common.c
M src/bin/pg_dump/pg_dump.c
M src/bin/pg_dump/pg_dump.h
M src/test/modules/test_pg_dump/t/001_base.pl

Avoid duplicates in ALTER ... DEPENDS ON EXTENSION

commit   : 73b31e784d64a4f24644de11d02fa632fe97bfab    
  
author   : Alvaro Herrera <[email protected]>    
date     : Wed, 11 Mar 2020 11:04:59 -0300    
  
committer: Alvaro Herrera <[email protected]>    
date     : Wed, 11 Mar 2020 11:04:59 -0300    

Click here for diff

If the command is attempted for an extension that the object already  
depends on, silently do nothing.  
  
In particular, this means that if a database containing multiple such  
entries is dumped, the restore will silently do the right thing and  
record just the first one.  (At least, in a world where pg_dump does  
dump such entries -- which it doesn't currently, but it will.)  
  
Backpatch to 9.6, where this kind of dependency was introduced.  
  
Reviewed-by: Ibrar Ahmed, Tom Lane (offlist)  
Discussion: https://postgr.es/m/[email protected]  

M src/backend/catalog/pg_depend.c
M src/backend/commands/alter.c
M src/include/catalog/dependency.h
M src/test/modules/test_extensions/expected/test_extdepend.out
M src/test/modules/test_extensions/sql/test_extdepend.sql

Fix pg_dump/pg_restore to restore event triggers later.

commit   : fab5456356c24fa36cab455e7d4275393d175654    
  
author   : Tom Lane <[email protected]>    
date     : Mon, 9 Mar 2020 14:58:11 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Mon, 9 Mar 2020 14:58:11 -0400    

Click here for diff

Previously, event triggers were restored just after regular triggers  
(and FK constraints, which are basically triggers).  This is risky  
since an event trigger, once installed, could interfere with subsequent  
restore commands.  Worse, because event triggers don't have any  
particular dependencies on any post-data objects, a parallel restore  
would consider them eligible to be restored the moment the post-data  
phase starts, allowing them to also interfere with restoration of a  
whole bunch of objects that would have been restored before them in  
a serial restore.  There's no way to completely remove the risk of a  
misguided event trigger breaking the restore, since if nothing else  
it could break other event triggers.  But we can certainly push them  
to later in the process to minimize the hazard.  
  
To fix, tweak the RestorePass mechanism introduced by commit 3eb9a5e7c  
so that event triggers are handled as part of the post-ACL processing  
pass (renaming the "REFRESH" pass to "POST_ACL" to reflect its more  
general use).  This will cause them to restore after everything except  
matview refreshes, which seems OK since matview refreshes really ought  
to run in the post-restore state of the database.  In a parallel  
restore, event triggers and matview refreshes might be intermixed,  
but that seems all right as well.  
  
Also update the code and comments in pg_dump_sort.c so that its idea  
of how things are sorted agrees with what actually happens due to  
the RestorePass mechanism.  This is mostly cosmetic: it'll affect the  
order of objects in a dump's TOC, but not the actual restore order.  
But not changing that would be quite confusing to somebody reading  
the code.  
  
Back-patch to all supported branches.  
  
Fabrízio de Royes Mello, tweaked a bit by me  
  
Discussion: https://postgr.es/m/CAFcNs+ow1hmFox8P--3GSdtwz-S3Binb6ZmoP6Vk+Xg=K6eZNA@mail.gmail.com  

M src/bin/pg_dump/pg_backup_archiver.c
M src/bin/pg_dump/pg_backup_archiver.h
M src/bin/pg_dump/pg_dump_sort.c

Fix bug that causes to report waiting in PS display twice, in hot standby.

commit   : d1b414e7e11bc9bdf58af64b3992d38daea7f099    
  
author   : Fujii Masao <[email protected]>    
date     : Tue, 10 Mar 2020 00:14:43 +0900    
  
committer: Fujii Masao <[email protected]>    
date     : Tue, 10 Mar 2020 00:14:43 +0900    

Click here for diff

Previously "waiting" could appear twice via PS in case of lock conflict  
in hot standby mode. Specifically this issue happend when the delay  
in WAL application determined by max_standby_archive_delay and  
max_standby_streaming_delay had passed but it took more than 500 msec  
to cancel all the conflicting transactions. Especially we can observe this  
easily by setting those delay parameters to -1.  
  
The cause of this issue was that WaitOnLock() and  
ResolveRecoveryConflictWithVirtualXIDs() added "waiting" to  
the process title in that case. This commit prevents  
ResolveRecoveryConflictWithVirtualXIDs() from reporting waiting  
in case of lock conflict, to fix the bug.  
  
Back-patch to all back branches.  
  
Author: Masahiko Sawada  
Reviewed-by: Fujii Masao  
Discussion: https://postgr.es/m/CA+fd4k4mXWTwfQLS3RPwGr4xnfAEs1ysFfgYHvmmoUgv6Zxvmg@mail.gmail.com  

M src/backend/storage/ipc/standby.c

Avoid assertion failure with targeted recovery in standby mode.

commit   : f06965c140efa25704b2924d1da4c83ed22d0190    
  
author   : Fujii Masao <[email protected]>    
date     : Mon, 9 Mar 2020 15:31:31 +0900    
  
committer: Fujii Masao <[email protected]>    
date     : Mon, 9 Mar 2020 15:31:31 +0900    

Click here for diff

At the end of recovery, standby mode is turned off to re-fetch the last  
valid record from archive or pg_wal. Previously, if recovery target was  
reached and standby mode was turned off while the current WAL source  
was stream, recovery could try to retrieve WAL file containing the last  
valid record unexpectedly from stream even though not in standby mode.  
This caused an assertion failure. That is, the assertion test confirms that  
WAL file should not be retrieved from stream if standby mode is not true.  
  
This commit moves back the current WAL source to archive if it's stream  
even though not in standby mode, to avoid that assertion failure.  
  
This issue doesn't cause the server to crash when built with assertion  
disabled. In this case, the attempt to retrieve WAL file from stream not  
in standby mode just fails. And then recovery tries to retrieve WAL file  
from archive or pg_wal.  
  
Back-patch to all supported branches.  
  
Author: Kyotaro Horiguchi  
Reviewed-by: Fujii Masao  
Discussion: https://postgr.es/m/[email protected]  

M src/backend/access/transam/xlog.c

Fix the name of the first WAL segment file, in docs.

commit   : e8b825bd7617f223a7cc27e60a39d09e133e7279    
  
author   : Fujii Masao <[email protected]>    
date     : Tue, 3 Mar 2020 12:22:04 +0900    
  
committer: Fujii Masao <[email protected]>    
date     : Tue, 3 Mar 2020 12:22:04 +0900    

Click here for diff

Previously the documentation explains that WAL segment files  
start at 000000010000000000000000. But the first WAL segment file  
that initdb creates is 000000010000000000000001 not  
000000010000000000000000. This change was caused by old  
commit 8c843fff2d, but the documentation had not been updated  
a long time.  
  
Back-patch to all supported branches.  
  
Author: Fujii Masao  
Reviewed-by: David Zhang  
Discussion: https://postgr.es/m/CAHGQGwHOmGe2OqGOmp8cOfNVDivq7dbV74L5nUGr+3eVd2CU2Q@mail.gmail.com  

M doc/src/sgml/wal.sgml

createdb: Fix quoting of --encoding, --lc-ctype and --lc-collate

commit   : 3340034f2c19730c1253dacbb07c3bf4f44f49af    
  
author   : Michael Paquier <[email protected]>    
date     : Thu, 27 Feb 2020 11:21:23 +0900    
  
committer: Michael Paquier <[email protected]>    
date     : Thu, 27 Feb 2020 11:21:23 +0900    

Click here for diff

The original coding failed to properly quote those arguments, leading to  
failures when using quotes in the values used.  As the quoting can be  
encoding-sensitive, the connection to the backend needs to be taken  
before applying the correct quoting.  
  
Author: Michael Paquier  
Reviewed-by: Daniel Gustafsson  
Discussion: https://postgr.es/m/[email protected]  
Backpatch-through: 9.5  

M src/bin/scripts/createdb.c

Fix confusion about event trigger vs. plain function in plpgsql.

commit   : 3e5308969aca4f2ce2dcd3766f9fe953b86b2a0c    
  
author   : Tom Lane <[email protected]>    
date     : Wed, 19 Feb 2020 14:44:58 -0500    
  
committer: Tom Lane <[email protected]>    
date     : Wed, 19 Feb 2020 14:44:58 -0500    

Click here for diff

The function hash table keys made by compute_function_hashkey() failed  
to distinguish event-trigger call context from regular call context.  
This meant that once we'd successfully made a hash entry for an event  
trigger (either by validation, or by normal use as an event trigger),  
an attempt to call the trigger function as a plain function would  
find this hash entry and thereby bypass the you-can't-do-that check in  
do_compile().  Thus we'd attempt to execute the function, leading to  
strange errors or even crashes, depending on function contents and  
server version.  
  
To fix, add an isEventTrigger field to PLpgSQL_func_hashkey,  
paralleling the longstanding infrastructure for regular triggers.  
This fits into what had been pad space, so there's no risk of an ABI  
break, even assuming that any third-party code is looking at these  
hash keys.  (I considered replacing isTrigger with a PLpgSQL_trigtype  
enum field, but felt that that carried some API/ABI risk.  Maybe we  
should change it in HEAD though.)  
  
Per bug #16266 from Alexander Lakhin.  This has been broken since  
event triggers were invented, so back-patch to all supported branches.  
  
Discussion: https://postgr.es/m/[email protected]  

M src/pl/plpgsql/src/pl_comp.c
M src/pl/plpgsql/src/plpgsql.h
M src/test/regress/expected/event_trigger.out
M src/test/regress/sql/event_trigger.sql

Fix mesurement of elapsed time during truncating heap in VACUUM.

commit   : 307c2703744432a3e46ebaa2f99c11a533e5efdd    
  
author   : Fujii Masao <[email protected]>    
date     : Wed, 19 Feb 2020 20:37:26 +0900    
  
committer: Fujii Masao <[email protected]>    
date     : Wed, 19 Feb 2020 20:37:26 +0900    

Click here for diff

VACUUM may truncate heap in several batches. The activity report  
is logged for each batch, and contains the number of pages in the table  
before and after the truncation, and also the elapsed time during  
the truncation. Previously the elapsed time reported in each batch was  
the total elapsed time since starting the truncation until finishing  
each batch. For example, if the truncation was processed dividing into  
three batches, the second batch reported the accumulated time elapsed  
during both first and second batches. This is strange and confusing  
because the number of pages in the table reported together is not  
total. Instead, each batch should report the time elapsed during  
only that batch.  
  
The cause of this issue was that the resource usage snapshot was  
initialized only at the beginning of the truncation and was never  
reset later. This commit fixes the issue by changing VACUUM so that  
the resource usage snapshot is reset at each batch.  
  
Back-patch to all supported branches.  
  
Reported-by: Tatsuhito Kasahara  
Author: Tatsuhito Kasahara  
Reviewed-by: Masahiko Sawada, Fujii Masao  
Discussion: https://postgr.es/m/CAP0=ZVJsf=NvQuy+QXQZ7B=ZVLoDV_JzsVC1FRsF1G18i3zMGg@mail.gmail.com  

M src/backend/commands/vacuumlazy.c

Stop demanding that top xact must be seen before subxact in decoding.

commit   : 59c1a03f07361daf78c66f343f113fca902b9fda    
  
author   : Amit Kapila <[email protected]>    
date     : Wed, 19 Feb 2020 08:52:08 +0530    
  
committer: Amit Kapila <[email protected]>    
date     : Wed, 19 Feb 2020 08:52:08 +0530    

Click here for diff

Manifested as  
  
ERROR:  subtransaction logged without previous top-level txn record  
  
this check forbids legit behaviours like  
 - First xl_xact_assignment record is beyond reading, i.e. earlier  
   restart_lsn.  
 - After restart_lsn there is some change of a subxact.  
 - After that, there is second xl_xact_assignment (for another subxact)  
   revealing the relationship between top and first subxact.  
  
Such a transaction won't be streamed anyway because we hadn't seen it in  
full.  Saying for sure whether xact of some record encountered after  
the snapshot was deserialized can be streamed or not requires to know  
whether it wrote something before deserialization point --if yes, it  
hasn't been seen in full and can't be decoded. Snapshot doesn't have such  
info, so there is no easy way to relax the check.  
  
Reported-by: Hsu, John  
Diagnosed-by: Arseny Sher  
Author: Arseny Sher, Amit Kapila  
Reviewed-by: Amit Kapila, Dilip Kumar  
Backpatch-through: 9.5  
Discussion: https://postgr.es/m/[email protected]  

M contrib/test_decoding/Makefile
A contrib/test_decoding/expected/subxact_without_top.out
A contrib/test_decoding/specs/subxact_without_top.spec
M src/backend/replication/logical/reorderbuffer.c

Teach pg_dump to dump comments on RLS policy objects.

commit   : 3380b99312c3ae80fdbb4e1745677f759b8f1ee1    
  
author   : Tom Lane <[email protected]>    
date     : Mon, 17 Feb 2020 18:40:02 -0500    
  
committer: Tom Lane <[email protected]>    
date     : Mon, 17 Feb 2020 18:40:02 -0500    

Click here for diff

This was unaccountably omitted in the original RLS patch.  
The SQL syntax is basically the same as for comments on triggers,  
so crib code from dumpTrigger().  
  
Per report from Marc Munro.  Back-patch to all supported branches.  
  
Discussion: https://postgr.es/m/[email protected]  

M src/bin/pg_dump/pg_dump.c

Doc: fix old oversights in GRANT/REVOKE documentation.

commit   : 804a650e4b0cddca546ddb37c7785c93b0752d07    
  
author   : Tom Lane <[email protected]>    
date     : Wed, 12 Feb 2020 14:13:13 -0500    
  
committer: Tom Lane <[email protected]>    
date     : Wed, 12 Feb 2020 14:13:13 -0500    

Click here for diff

The GRANTED BY clause in GRANT/REVOKE ROLE has been there since 2005  
but was never documented.  I'm not sure now whether that was just an  
oversight or was intentional (given the limited capability of the  
option).  But seeing that pg_dumpall does emit code that uses this  
option, it seems like not documenting it at all is a bad idea.  
  
Also, when we upgraded the syntax to allow CURRENT_USER/SESSION_USER  
as the privilege recipient, the role form of GRANT was incorrectly  
not modified to show that, and REVOKE's docs weren't touched at all.  
  
Although I'm not that excited about GRANTED BY, the other oversight  
seems serious enough to justify a back-patch.  
  
Discussion: https://postgr.es/m/[email protected]  

M doc/src/sgml/ref/grant.sgml
M doc/src/sgml/ref/revoke.sgml

Document the pg_upgrade -j/--jobs option as taking an argument

commit   : cbb59546a0279046287a5f284a38cfd12ea4a953    
  
author   : Peter Eisentraut <[email protected]>    
date     : Tue, 11 Feb 2020 23:47:36 +0100    
  
committer: Peter Eisentraut <[email protected]>    
date     : Tue, 11 Feb 2020 23:47:36 +0100    

Click here for diff

M doc/src/sgml/ref/pgupgrade.sgml
M src/bin/pg_upgrade/option.c