Stamp 11.9.
commit : 25180875cb90ef18e83ce45697a9a4d4686b552b
author : Tom Lane <[email protected]>
date : Mon, 10 Aug 2020 17:17:40 -0400
committer: Tom Lane <[email protected]>
date : Mon, 10 Aug 2020 17:17:40 -0400
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
Last-minute updates for release notes.
commit : 6f57b9bf39283b89808c45da360c748ab29535c6
author : Tom Lane <[email protected]>
date : Mon, 10 Aug 2020 15:35:46 -0400
committer: Tom Lane <[email protected]>
date : Mon, 10 Aug 2020 15:35:46 -0400
Security: CVE-2020-14349, CVE-2020-14350
M doc/src/sgml/release-11.sgml
Document clashes between logical replication and untrusted users.
commit : 613ed8a588d31f6a3f253e188bf51decb4472b7c
author : Noah Misch <[email protected]>
date : Mon, 10 Aug 2020 09:22:54 -0700
committer: Noah Misch <[email protected]>
date : Mon, 10 Aug 2020 09:22:54 -0700
Back-patch to v10, which introduced logical replication.
Security: CVE-2020-14349
M doc/src/sgml/logical-replication.sgml
Empty search_path in logical replication apply worker and walsender.
commit : 5a936d64c84ddce2c0e0f2f1f9db2c1094c3ceb8
author : Noah Misch <[email protected]>
date : Mon, 10 Aug 2020 09:22:54 -0700
committer: Noah Misch <[email protected]>
date : Mon, 10 Aug 2020 09:22:54 -0700
This is like CVE-2018-1058 commit
582edc369cdbd348d68441fc50fa26a84afd0c1a. Today, a malicious user of a
publisher or subscriber database can invoke arbitrary SQL functions
under an identity running replication, often a superuser. This fix may
cause "does not exist" or "no schema has been selected to create in"
errors in a replication process. After upgrading, consider watching
server logs for these errors. Objects accruing schema qualification in
the wake of the earlier commit are unlikely to need further correction.
Back-patch to v10, which introduced logical replication.
Security: CVE-2020-14349
M src/backend/replication/libpqwalreceiver/libpqwalreceiver.c
M src/backend/replication/logical/worker.c
M src/test/subscription/t/001_rep_changes.pl
Move connect.h from fe_utils to src/include/common.
commit : 7d6a41943b1d70bca066534440e8e0e800f11634
author : Noah Misch <[email protected]>
date : Mon, 10 Aug 2020 09:22:54 -0700
committer: Noah Misch <[email protected]>
date : Mon, 10 Aug 2020 09:22:54 -0700
Any libpq client can use the header. Clients include backend components
postgres_fdw, dblink, and logical replication apply worker. Back-patch
to v10, because another fix needs this. In released branches, just copy
the header and keep the original.
A src/include/common/connect.h
Make contrib modules' installation scripts more secure.
commit : afa358786bde70d9cccc0e32f6fad45afe62c3e5
author : Tom Lane <[email protected]>
date : Mon, 10 Aug 2020 10:44:43 -0400
committer: Tom Lane <[email protected]>
date : Mon, 10 Aug 2020 10:44:43 -0400
Hostile objects located within the installation-time search_path could
capture references in an extension's installation or upgrade script.
If the extension is being installed with superuser privileges, this
opens the door to privilege escalation. While such hazards have existed
all along, their urgency increases with the v13 "trusted extensions"
feature, because that lets a non-superuser control the installation path
for a superuser-privileged script. Therefore, make a number of changes
to make such situations more secure:
* Tweak the construction of the installation-time search_path to ensure
that references to objects in pg_catalog can't be subverted; and
explicitly add pg_temp to the end of the path to prevent attacks using
temporary objects.
* Disable check_function_bodies within installation/upgrade scripts,
so that any security gaps in SQL-language or PL-language function bodies
cannot create a risk of unwanted installation-time code execution.
* Adjust lookup of type input/receive functions and join estimator
functions to complain if there are multiple candidate functions. This
prevents capture of references to functions whose signature is not the
first one checked; and it's arguably more user-friendly anyway.
* Modify various contrib upgrade scripts to ensure that catalog
modification queries are executed with secure search paths. (These
are in-place modifications with no extension version changes, since
it is the update process itself that is at issue, not the end result.)
Extensions that depend on other extensions cannot be made fully secure
by these methods alone; therefore, revert the "trusted" marking that
commit eb67623c9 applied to earthdistance and hstore_plperl, pending
some better solution to that set of issues.
Also add documentation around these issues, to help extension authors
write secure installation scripts.
Patch by me, following an observation by Andres Freund; thanks
to Noah Misch for review.
Security: CVE-2020-14350
M contrib/btree_gist/btree_gist–1.1–1.2.sql
M contrib/citext/citext–1.1–1.2.sql
M contrib/citext/citext–1.2–1.3.sql
M contrib/citext/citext–unpackaged–1.0.sql
M contrib/cube/cube–1.1–1.2.sql
M contrib/cube/cube–1.3–1.4.sql
M contrib/earthdistance/earthdistance–1.1.sql
M contrib/hstore/hstore–1.1–1.2.sql
M contrib/hstore/hstore–1.3–1.4.sql
M contrib/intagg/intagg–1.0–1.1.sql
M contrib/intarray/intarray–1.1–1.2.sql
M contrib/intarray/intarray–unpackaged–1.0.sql
M contrib/ltree/ltree–1.0–1.1.sql
M contrib/pg_trgm/pg_trgm–1.2–1.3.sql
M contrib/pg_trgm/pg_trgm–unpackaged–1.0.sql
M contrib/seg/seg–1.0–1.1.sql
M contrib/seg/seg–1.2–1.3.sql
M doc/src/sgml/earthdistance.sgml
M doc/src/sgml/extend.sgml
M doc/src/sgml/hstore.sgml
M doc/src/sgml/ltree.sgml
M doc/src/sgml/ref/create_extension.sgml
M src/backend/commands/extension.c
M src/backend/commands/operatorcmds.c
M src/backend/commands/typecmds.c
Translation updates
commit : e06bbe043568199da466a41c6302af0da9ac1495
author : Peter Eisentraut <[email protected]>
date : Mon, 10 Aug 2020 15:27:40 +0200
committer: Peter Eisentraut <[email protected]>
date : Mon, 10 Aug 2020 15:27:40 +0200
Source-Git-URL: https://git.postgresql.org/git/pgtranslation/messages.git
Source-Git-Hash: 62fe7952a0a484231828d36e40afe14de4edfc9f
M src/backend/po/de.po
M src/backend/po/es.po
M src/bin/initdb/po/de.po
M src/bin/initdb/po/es.po
M src/bin/pg_archivecleanup/po/es.po
M src/bin/pg_basebackup/po/es.po
M src/bin/pg_config/po/es.po
M src/bin/pg_controldata/po/es.po
M src/bin/pg_ctl/po/de.po
M src/bin/pg_ctl/po/es.po
M src/bin/pg_dump/po/de.po
M src/bin/pg_dump/po/es.po
M src/bin/pg_resetwal/po/es.po
M src/bin/pg_rewind/po/es.po
M src/bin/pg_test_fsync/po/es.po
M src/bin/pg_test_timing/po/es.po
M src/bin/pg_upgrade/po/es.po
M src/bin/pg_verify_checksums/po/es.po
M src/bin/pg_waldump/po/es.po
M src/bin/psql/po/de.po
M src/bin/psql/po/es.po
M src/bin/psql/po/ja.po
M src/bin/scripts/po/es.po
M src/interfaces/ecpg/ecpglib/po/es.po
M src/interfaces/ecpg/preproc/po/es.po
M src/interfaces/libpq/po/es.po
M src/pl/plperl/po/es.po
M src/pl/plpgsql/src/po/es.po
M src/pl/plpython/po/es.po
M src/pl/tcl/po/es.po
Check for fseeko() failure in pg_dump's _tarAddFile().
commit : 26037705159489aff046d93227ab469d71616baf
author : Tom Lane <[email protected]>
date : Sun, 9 Aug 2020 12:39:08 -0400
committer: Tom Lane <[email protected]>
date : Sun, 9 Aug 2020 12:39:08 -0400
Coverity pointed out, not unreasonably, that we checked fseeko's
result at every other call site but these. Failure to seek in the
temp file (note this is NOT pg_dump's output file) seems quite
unlikely, and even if it did happen the file length cross-check
further down would probably detect the problem. Still, that's a
poor excuse for not checking the result of a system call.
M src/bin/pg_dump/pg_backup_tar.c
Release notes for 12.4, 11.9, 10.14, 9.6.19, 9.5.23.
commit : ae2d34478c20f185927cc9d4713a0d44d5ab554f
author : Tom Lane <[email protected]>
date : Sat, 8 Aug 2020 20:01:41 -0400
committer: Tom Lane <[email protected]>
date : Sat, 8 Aug 2020 20:01:41 -0400
M doc/src/sgml/release-11.sgml
walsnd: Don't set waiting_for_ping_response spuriously
commit : 1fa6eec974f8f17f8c5fcd54eb33625f9b107050
author : Alvaro Herrera <[email protected]>
date : Sat, 8 Aug 2020 12:31:55 -0400
committer: Alvaro Herrera <[email protected]>
date : Sat, 8 Aug 2020 12:31:55 -0400
Ashutosh Bapat noticed that when logical walsender needs to wait for
WAL, and it realizes that it must send a keepalive message to
walreceiver to update the sent-LSN, which *does not* request a reply
from walreceiver, it wrongly sets the flag that it's going to wait for
that reply. That means that any future would-be sender of feedback
messages ends up not sending a feedback message, because they all
believe that a reply is expected.
With built-in logical replication there's not much harm in this, because
WalReceiverMain will send a ping-back every wal_receiver_timeout/2
anyway; but with other logical replication systems (e.g. pglogical) it
can cause significant pain.
This problem was introduced in commit 41d5f8ad734, where the
request-reply flag was changed from true to false to WalSndKeepalive,
without at the same time removing the line that sets
waiting_for_ping_response.
Just removing that line would be a sufficient fix, but it seems better
to shift the responsibility of setting the flag to WalSndKeepalive
itself instead of requiring caller to do it; this is clearly less
error-prone.
Author: Álvaro Herrera <[email protected]>
Reported-by: Ashutosh Bapat <[email protected]>
Backpatch: 9.5 and up
Discussion: https://postgr.es/m/[email protected]
M src/backend/replication/walsender.c
Fix yet another issue with step generation in partition pruning.
commit : 1db9c80f835e436ca3c27bccf43135ebf7e3c62b
author : Etsuro Fujita <[email protected]>
date : Fri, 7 Aug 2020 14:45:04 +0900
committer: Etsuro Fujita <[email protected]>
date : Fri, 7 Aug 2020 14:45:04 +0900
Commit 13838740f fixed some issues with step generation in partition
pruning, but there was yet another one: get_steps_using_prefix() assumes
that clauses in the passed-in prefix list are sorted in ascending order
of their partition key numbers, but the caller failed to ensure this for
range partitioning, which led to an assertion failure in debug builds.
Adjust the caller function to arrange the clauses in the prefix list in
the required order for range partitioning.
Back-patch to v11, like the previous commit.
Patch by me, reviewed by Amit Langote.
Discussion: https://postgr.es/m/CAPmGK16jkXiFG0YqMbU66wte-oJTfW6D1HaNvQf%3D%2B5o9%3Dm55wQ%40mail.gmail.com
M src/backend/partitioning/partprune.c
M src/test/regress/expected/partition_prune.out
M src/test/regress/sql/partition_prune.sql
Fix typo.
commit : 495a9b1fbfe890d5da2aaf52ee06a8fd4f4fe339
author : Robert Haas <[email protected]>
date : Thu, 6 Aug 2020 14:55:00 -0400
committer: Robert Haas <[email protected]>
date : Thu, 6 Aug 2020 14:55:00 -0400
Per report from Tom Lane. Previously fixed in master by
commit f057980149ddccd4b862d2c6b3920ed498b0d7ec.
M src/backend/access/transam/xlog.c
Fix minor problems with non-exclusive backup cleanup.
commit : f7013683d9bb663a6a917421b1374306a32f165b
author : Robert Haas <[email protected]>
date : Thu, 6 Aug 2020 13:58:23 -0400
committer: Robert Haas <[email protected]>
date : Thu, 6 Aug 2020 13:58:23 -0400
The previous coding imagined that it could call before_shmem_exit()
when a non-exclusive backup began and then remove the previously-added
handler by calling cancel_before_shmem_exit() when that backup
ended. However, this only works provided that nothing else in the
system has registered a before_shmem_exit() hook in the interim,
because cancel_before_shmem_exit() is documented to remove a callback
only if it is the latest callback registered. It also only works
if nothing can ERROR out between the time that sessionBackupState
is reset and the time that cancel_before_shmem_exit(), which doesn't
seem to be strictly true.
To fix, leave the handler installed for the lifetime of the session,
arrange to install it just once, and teach it to quietly do nothing if
there isn't a non-exclusive backup in process.
This was originally committed to master as
303640199d0436c5e7acdf50b837a027b5726594, but I did not back-patch
at the time because the consequences were minor. However, now
there's been a second report of this causing trouble with a slightly
different test case than the one I reported originally, so now
I'm back-patching as far as v11 where JIT was introduced.
Patch by me, reviewed by Kyotaro Horiguchi, Michael Paquier (who
preferred a different approach, but got outvoted), Fujii Masao,
and Tom Lane, and with comments by various others. New problem
report from Bharath Rupireddy.
Discussion: http://postgr.es/m/CA+TgmobMjnyBfNhGTKQEDbqXYE3_rXWpc4CM63fhyerNCes3mA@mail.gmail.com
Discussion: http://postgr.es/m/CALj2ACWk7j4F2v2fxxYfrroOF=AdFNPr1WsV+AGtHAFQOqm_pw@mail.gmail.com
M src/backend/access/transam/xlog.c
M src/backend/access/transam/xlogfuncs.c
M src/backend/replication/basebackup.c
M src/include/access/xlog.h
doc: clarify "state" table reference in tutorial
commit : b144edbf7d1714ec7471f47952ba88fa991ff79f
author : Bruce Momjian <[email protected]>
date : Wed, 5 Aug 2020 17:12:10 -0400
committer: Bruce Momjian <[email protected]>
date : Wed, 5 Aug 2020 17:12:10 -0400
Reported-by: Vyacheslav Shablistyy
Discussion: https://postgr.es/m/[email protected]
Backpatch-through: 9.5
M doc/src/sgml/advanced.sgml
Increase hard-wired timeout values in ecpg regression tests.
commit : f45cbed4c5781b30e7f4c4a500649b75f06bb0c3
author : Tom Lane <[email protected]>
date : Tue, 4 Aug 2020 15:20:31 -0400
committer: Tom Lane <[email protected]>
date : Tue, 4 Aug 2020 15:20:31 -0400
A couple of test cases had connect_timeout=14, a value that seems
to have been plucked from a hat. While it's more than sufficient
for normal cases, slow/overloaded buildfarm machines can get a timeout
failure here, as per recent report from "sungazer". Increase to 180
seconds, which is in line with our typical timeouts elsewhere in
the regression tests.
Back-patch to 9.6; the code looks different in 9.5, and this doesn't
seem to be quite worth the effort to adapt to that.
Report: https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=sungazer&dt=2020-08-04%2007%3A12%3A22
M src/interfaces/ecpg/test/connect/test1.pgc
M src/interfaces/ecpg/test/connect/test5.pgc
M src/interfaces/ecpg/test/expected/connect-test1-minGW32.stderr
M src/interfaces/ecpg/test/expected/connect-test1.c
M src/interfaces/ecpg/test/expected/connect-test1.stderr
M src/interfaces/ecpg/test/expected/connect-test5.c
M src/interfaces/ecpg/test/expected/connect-test5.stderr
Doc: fix obsolete info about allowed range of TZ offsets in timetz.
commit : 995c53b44999c3a04ca54351dbc2d51bce82e55e
author : Tom Lane <[email protected]>
date : Mon, 3 Aug 2020 13:11:16 -0400
committer: Tom Lane <[email protected]>
date : Mon, 3 Aug 2020 13:11:16 -0400
We've allowed UTC offsets up to +/- 15:59 since commit cd0ff9c0f, but
that commit forgot to fix the documentation about timetz.
Per bug #16571 from osdba.
Discussion: https://postgr.es/m/[email protected]
M doc/src/sgml/datatype.sgml
Fix rare failure in LDAP tests.
commit : 1beb3ac5184fd32e8a1a79f4ace477a9e7ea27a7
author : Thomas Munro <[email protected]>
date : Mon, 3 Aug 2020 12:39:15 +1200
committer: Thomas Munro <[email protected]>
date : Mon, 3 Aug 2020 12:39:15 +1200
Instead of writing a query to psql's stdin, use -c. This avoids a
failure where psql exits before we write, seen a few times on the build
farm. Thanks to Tom Lane for the suggestion.
Back-patch to 11, where the LDAP tests arrived.
Reviewed-by: Noah Misch <[email protected]>
Discussion: https://postgr.es/m/CA%2BhUKGLFmW%2BHQYPeKiwSp5sdFFHtFViCpw4Mh6yAgEx74r5-Cw%40mail.gmail.com
M src/test/ldap/t/001_auth.pl
Adjust pgcrypto's expected test results for --disable-strong-random.
commit : 1785ac8adebeb04aed6097d0d425f0c940f8fafb
author : Tom Lane <[email protected]>
date : Sun, 2 Aug 2020 11:00:12 -0400
committer: Tom Lane <[email protected]>
date : Sun, 2 Aug 2020 11:00:12 -0400
These files were missed when commit a3ab7a707 added a new test query.
Understandable considering these files no longer exist in HEAD.
Per buildfarm member pademelon.
M contrib/pgcrypto/expected/pgp-compression_1.out
Restore lost amcheck TOAST test coverage.
commit : a4ad7ac2d8d422f6aad3dec46f13e6b0bd6bd7ed
author : Peter Geoghegan <[email protected]>
date : Fri, 31 Jul 2020 15:34:23 -0700
committer: Peter Geoghegan <[email protected]>
date : Fri, 31 Jul 2020 15:34:23 -0700
Commit eba77534 fixed an amcheck false positive bug involving
inconsistencies in TOAST input state between table and index. A test
case was added that verified that such an inconsistency didn't result in
a spurious corruption related error.
Test coverage from the test was accidentally lost by commit 501e41dd,
which propagated ALTER TABLE ... SET STORAGE attstorage state to
indexes. This broke the test because the test specifically relied on
attstorage not being propagated. This artificially forced there to be
index tuples whose datums were equivalent to the datums in the heap
without the datums actually being bitwise equal.
Fix this by updating pg_attribute directly instead. Commit 501e41dd
made similar changes to a test_decoding TOAST-related test case which
made the same assumption, but overlooked the amcheck test case.
Backpatch: 11-, just like commit eba77534 (and commit 501e41dd).
M contrib/amcheck/expected/check_btree.out
M contrib/amcheck/sql/check_btree.sql
Fix recently-introduced performance problem in ts_headline().
commit : da596fb4b03eec452587247e2784e4a3c455d4dd
author : Tom Lane <[email protected]>
date : Fri, 31 Jul 2020 11:43:12 -0400
committer: Tom Lane <[email protected]>
date : Fri, 31 Jul 2020 11:43:12 -0400
The new hlCover() algorithm that I introduced in commit c9b0c678d
turns out to potentially take O(N^2) or worse time on long documents,
if there are many occurrences of individual query words but few or no
substrings that actually satisfy the query. (One way to hit this
behavior is with a "common_word & rare_word" type of query.) This
seems unavoidable given the original goal of checking every substring
of the document, so we have to back off that idea. Fortunately, it
seems unlikely that anyone would really want headlines spanning all of
a long document, so we can avoid the worse-than-linear behavior by
imposing a maximum length of substring that we'll consider.
For now, just hard-wire that maximum length as a multiple of max_words
times max_fragments. Perhaps at some point somebody will argue for
exposing it as a ts_headline parameter, but I'm hesitant to make such
a feature addition in a back-patched bug fix.
I also noted that the hlFirstIndex() function I'd added in that
commit was unnecessarily stupid: it really only needs to check whether
a HeadlineWordEntry's item pointer is null or not. This wouldn't make
all that much difference in typical cases with queries having just
a few terms, but a cycle shaved is a cycle earned.
In addition, add a CHECK_FOR_INTERRUPTS call in TS_execute_recurse.
This ensures that hlCover's loop is cancellable if it manages to take
a long time, and it may protect some other TS_execute callers as well.
Back-patch to 9.6 as the previous commit was. I also chose to add the
CHECK_FOR_INTERRUPTS call to 9.5. The old hlCover() algorithm seems
to avoid the O(N^2) behavior, at least on the test case I tried, but
nonetheless it's not very quick on a long document.
Per report from Stephen Frost.
Discussion: https://postgr.es/m/[email protected]
M src/backend/tsearch/wparser_def.c
M src/backend/utils/adt/tsvector_op.c
Doc: fix high availability solutions comparison.
commit : 065699590a90e3421bd3fb805d1469f4d544e8a5
author : Tatsuo Ishii <[email protected]>
date : Fri, 31 Jul 2020 07:49:00 +0900
committer: Tatsuo Ishii <[email protected]>
date : Fri, 31 Jul 2020 07:49:00 +0900
In "High Availability, Load Balancing, and Replication" chapter,
certain descriptions of Pgpool-II were not correct at this point. It
does not need conflict resolution. Also "Multiple-Server Parallel
Query Execution" is not supported anymore.
Discussion: https://postgr.es/m/20200726.230128.53842489850344110.t-ishii%40sraoss.co.jp
Author: Tatsuo Ishii
Reviewed-by: Bruce Momjian
Backpatch-through: 9.5
M doc/src/sgml/high-availability.sgml
doc: Mention index references in pg_inherits
commit : 255c707c87339110c04bc7240cf79bceb1a118d3
author : Michael Paquier <[email protected]>
date : Thu, 30 Jul 2020 15:49:01 +0900
committer: Michael Paquier <[email protected]>
date : Thu, 30 Jul 2020 15:49:01 +0900
Partitioned indexes are also registered in pg_inherits, but the
description of this catalog did not reflect that.
Author: Dagfinn Ilmari Mannsåker
Discussion: https://postgr.es/m/[email protected]
Backpatch-through: 11
M doc/src/sgml/catalogs.sgml
Backpatch tuplesort.c assertion.
commit : 87eb25535d0db49fec9b3ddb2f1c4dfd97c8805e
author : Peter Geoghegan <[email protected]>
date : Wed, 29 Jul 2020 16:00:54 -0700
committer: Peter Geoghegan <[email protected]>
date : Wed, 29 Jul 2020 16:00:54 -0700
Backpatch an assertion (that was originally added to Postgres 12 by
commit dd299df8189) that seems broadly useful. The assertion can detect
violations of the HOT invariant (i.e. no two index tuples can point to
the same heap TID) when CREATE INDEX somehow incorrectly allows that to
take place.
For example, a IndexBuildHeapScan/heapam_index_build_range_scan bug
might result in two tuples that both point to the same heap TID. If
these two tuples also happen to be duplicates, the assertion will fail.
Discussion: https://postgr.es/m/CAH2-WzmBxu4o=pMsniur+bwHqCGCmV_AOLkuK6BuU7ngA6evqw@mail.gmail.com
Backpatch: 9.5-11 only
M src/backend/utils/sort/tuplesort.c
Doc: Improve documentation for pg_jit_available()
commit : baecd2715b5cd4c0e596bc4ba438957ef88e1d25
author : David Rowley <[email protected]>
date : Tue, 28 Jul 2020 22:52:58 +1200
committer: David Rowley <[email protected]>
date : Tue, 28 Jul 2020 22:52:58 +1200
Per complaint from Scott Ribe. Based on wording suggestion from Tom Lane.
Discussion: https://postgr.es/m/[email protected]
Backpatch-through: 11, where pg_jit_available() was added
M doc/src/sgml/func.sgml
Fix some issues with step generation in partition pruning.
commit : bead29decf906cf53e1578bf878690b4107891d9
author : Etsuro Fujita <[email protected]>
date : Tue, 28 Jul 2020 11:00:03 +0900
committer: Etsuro Fujita <[email protected]>
date : Tue, 28 Jul 2020 11:00:03 +0900
In the case of range partitioning, get_steps_using_prefix() assumes that
the passed-in prefix list contains at least one clause for each of the
partition keys earlier than one specified in the passed-in
step_lastkeyno, but the caller (ie, gen_prune_steps_from_opexps())
didn't take it into account, which led to a server crash or incorrect
results when the list contained no clauses for such partition keys, as
reported in bug #16500 and #16501 from Kobayashi Hisanori. Update the
caller to call that function only when the list created there contains
at least one clause for each of the earlier partition keys in the case
of range partitioning.
While at it, fix some other issues:
* The list to pass to get_steps_using_prefix() is allowed to contain
multiple clauses for the same partition key, as described in the
comment for that function, but that function actually assumed that the
list contained just a single clause for each of middle partition keys,
which led to an assertion failure when the list contained multiple
clauses for such partition keys. Update that function to match the
comment.
* In the case of hash partitioning, partition keys are allowed to be
NULL, in which case the list to pass to get_steps_using_prefix()
contains no clauses for NULL partition keys, but that function treats
that case as like the case of range partitioning, which led to the
assertion failure. Update the assertion test to take into account
NULL partition keys in the case of hash partitioning.
* Fix a typo in a comment in get_steps_using_prefix_recurse().
* gen_partprune_steps() failed to detect self-contradiction from
strict-qual clauses and an IS NULL clause for the same partition key
in some cases, producing incorrect partition-pruning steps, which led
to incorrect results of partition pruning, but didn't cause any
user-visible problems fortunately, as the self-contradiction is
detected later in the query planning. Update that function to detect
the self-contradiction.
Per bug #16500 and #16501 from Kobayashi Hisanori. Patch by me, initial
diagnosis for the reported issue and review by Dmitry Dolgov.
Back-patch to v11, where partition pruning was introduced.
Discussion: https://postgr.es/m/16500-d1613f2a78e1e090%40postgresql.org
Discussion: https://postgr.es/m/16501-5234a9a0394f6754%40postgresql.org
M src/backend/partitioning/partprune.c
M src/test/regress/expected/partition_prune.out
M src/test/regress/sql/partition_prune.sql
Fix corner case with 16kB-long decompression in pgcrypto, take 2
commit : 202fc4ca531eb7cf46711c6790a88543b6f713fc
author : Michael Paquier <[email protected]>
date : Mon, 27 Jul 2020 15:59:03 +0900
committer: Michael Paquier <[email protected]>
date : Mon, 27 Jul 2020 15:59:03 +0900
A compressed stream may end with an empty packet. In this case
decompression finishes before reading the empty packet and the
remaining stream packet causes a failure in reading the following
data. This commit makes sure to consume such extra data, avoiding a
failure when decompression the data. This corner case was reproducible
easily with a data length of 16kB, and existed since e94dd6a. A cheap
regression test is added to cover this case based on a random,
incompressible string.
The first attempt of this patch has allowed to find an older failure
within the compression logic of pgcrypto, fixed by b9b6105. This
involved SLES 15 with z390 where a custom flavor of libz gets used.
Bonus thanks to Mark Wong for providing access to the specific
environment.
Reported-by: Frank Gagnepain
Author: Kyotaro Horiguchi, Michael Paquier
Reviewed-by: Tom Lane
Discussion: https://postgr.es/m/[email protected]
Backpatch-through: 9.5
M contrib/pgcrypto/expected/pgp-compression.out
M contrib/pgcrypto/pgp-compress.c
M contrib/pgcrypto/sql/pgp-compression.sql
Fix buffer usage stats for nodes above Gather Merge.
commit : 603c18b7ee2e100f081bb756b54758b38c59f65f
author : Amit Kapila <[email protected]>
date : Sat, 25 Jul 2020 10:48:09 +0530
committer: Amit Kapila <[email protected]>
date : Sat, 25 Jul 2020 10:48:09 +0530
Commit 85c9d347 addressed a similar problem for Gather and Gather
Merge nodes but forgot to account for nodes above parallel nodes. This
still works for nodes above Gather node because we shut down the workers
for Gather node as soon as there are no more tuples. We can do a similar
thing for Gather Merge as well but it seems better to account for stats
during nodes shutdown after completing the execution.
Reported-by: Stéphane Lorek, Jehan-Guillaume de Rorthais
Author: Jehan-Guillaume de Rorthais <[email protected]>
Reviewed-by: Amit Kapila
Backpatch-through: 10, where it was introduced
Discussion: https://postgr.es/m/20200718160206.584532a2@firost
M src/backend/executor/execProcnode.c
Fix ancient violation of zlib's API spec.
commit : 475c69c976620f7653c15b8dae90ba8dccf5345a
author : Tom Lane <[email protected]>
date : Thu, 23 Jul 2020 17:19:37 -0400
committer: Tom Lane <[email protected]>
date : Thu, 23 Jul 2020 17:19:37 -0400
contrib/pgcrypto mishandled the case where deflate() does not consume
all of the offered input on the first try. It reset the next_in pointer
to the start of the input instead of leaving it alone, causing the wrong
data to be fed to the next deflate() call.
This has been broken since pgcrypto was committed. The reason for the
lack of complaints seems to be that it's fairly hard to get stock zlib
to not consume all the input, so long as the output buffer is big enough
(which it normally would be in pgcrypto's usage; AFAICT the input is
always going to be packetized into packets no larger than ZIP_OUT_BUF).
However, IBM's zlibNX implementation for AIX evidently will do it
in some cases.
I did not add a test case for this, because I couldn't find one that
would fail with stock zlib. When we put back the test case for
bug #16476, that will cover the zlibNX situation well enough.
While here, write deflate()'s second argument as Z_NO_FLUSH per its
API spec, instead of hard-wiring the value zero.
Per buildfarm results and subsequent investigation.
Discussion: https://postgr.es/m/[email protected]
M contrib/pgcrypto/pgp-compress.c
doc: Document that ssl_ciphers does not affect TLS 1.3
commit : 807dbce4b668c92c06b507e44da1c6a177bcbd20
author : Peter Eisentraut <[email protected]>
date : Thu, 23 Jul 2020 17:13:00 +0200
committer: Peter Eisentraut <[email protected]>
date : Thu, 23 Jul 2020 17:13:00 +0200
TLS 1.3 uses a different way of specifying ciphers and a different
OpenSSL API. PostgreSQL currently does not support setting those
ciphers. For now, just document this. In the future, support for
this might be added somehow.
Reviewed-by: Jonathan S. Katz <[email protected]>
Reviewed-by: Tom Lane <[email protected]>
M doc/src/sgml/config.sgml
Fix error message.
commit : 028f0c3a86d003ecaab05ff9df2386f806a3ddf3
author : Thomas Munro <[email protected]>
date : Thu, 23 Jul 2020 21:10:49 +1200
committer: Thomas Munro <[email protected]>
date : Thu, 23 Jul 2020 21:10:49 +1200
Remove extra space. Back-patch to all releases, like commit 7897e3bb.
Author: Lu, Chenyang <[email protected]>
Discussion: https://postgr.es/m/795d03c6129844d3803e7eea48f5af0d%40G08CNEXMBPEKD04.g08.fujitsu.local
M src/backend/storage/file/buffile.c
Revert "Fix corner case with PGP decompression in pgcrypto"
commit : 6ae2d925b131962cfb6a94294adae0eb77f77a16
author : Michael Paquier <[email protected]>
date : Thu, 23 Jul 2020 08:29:22 +0900
committer: Michael Paquier <[email protected]>
date : Thu, 23 Jul 2020 08:29:22 +0900
This reverts commit 9e10898, after finding out that buildfarm members
running SLES 15 on z390 complain on the compression and decompression
logic of the new test: pipistrelles, barbthroat and steamerduck.
Those hosts are visibly using hardware-specific changes to improve zlib
performance, requiring more investigation.
Thanks to Tom Lane for the discussion.
Discussion: https://postgr.es/m/[email protected]
Backpatch-through: 9.5
M contrib/pgcrypto/expected/pgp-compression.out
M contrib/pgcrypto/pgp-compress.c
M contrib/pgcrypto/sql/pgp-compression.sql
Fix corner case with PGP decompression in pgcrypto
commit : eceb415c6ff0eb2494f90397433a966a182f3908
author : Michael Paquier <[email protected]>
date : Wed, 22 Jul 2020 14:52:50 +0900
committer: Michael Paquier <[email protected]>
date : Wed, 22 Jul 2020 14:52:50 +0900
A compressed stream may end with an empty packet, and PGP decompression
finished before reading this empty packet in the remaining stream. This
caused a failure in pgcrypto, handling this case as corrupted data.
This commit makes sure to consume such extra data, avoiding a failure
when decompression the entire stream. This corner case was reproducible
with a data length of 16kB, and existed since its introduction in
e94dd6a. A cheap regression test is added to cover this case.
Thanks to Jeff Janes for the extra investigation.
Reported-by: Frank Gagnepain
Author: Kyotaro Horiguchi, Michael Paquier
Discussion: https://postgr.es/m/[email protected]
Backpatch-through: 9.5
M contrib/pgcrypto/expected/pgp-compression.out
M contrib/pgcrypto/pgp-compress.c
M contrib/pgcrypto/sql/pgp-compression.sql
Avoid C99-ism in pre-v12 branches.
commit : 22b96f883fe2a454476b4d5fd69ee46b15889169
author : Tom Lane <[email protected]>
date : Tue, 21 Jul 2020 13:13:15 -0400
committer: Tom Lane <[email protected]>
date : Tue, 21 Jul 2020 13:13:15 -0400
Per buildfarm (I need to figure out why my own compiler did not
whine about this).
M src/backend/catalog/indexing.c
Assert that we don't insert nulls into attnotnull catalog columns.
commit : f451029db85acc9dd9856715e5490ade59fda229
author : Tom Lane <[email protected]>
date : Tue, 21 Jul 2020 12:38:08 -0400
committer: Tom Lane <[email protected]>
date : Tue, 21 Jul 2020 12:38:08 -0400
The executor checks for this error, and so does the bootstrap catalog
loader, but we never checked for it in retail catalog manipulations.
The folly of that has now been exposed, so let's add assertions
checking it. Checking in CatalogTupleInsert[WithInfo] and
CatalogTupleUpdate[WithInfo] should be enough to cover this.
Back-patch to v10; the aforesaid functions didn't exist before that,
and it didn't seem worth adapting the patch to the oldest branches.
But given the risk of JIT crashes, I think we certainly need this
as far back as v11.
Pre-v13, we have to explicitly exclude pg_subscription.subslotname
and pg_subscription_rel.srsublsn from the checks, since they are
mismarked. (Even if we change our mind about applying BKI_FORCE_NULL
in the branch tips, it doesn't seem wise to have assertions that
would fire in existing databases.)
Discussion: https://postgr.es/m/[email protected]
M doc/src/sgml/bki.sgml
M src/backend/catalog/indexing.c
Avoid direct C access to possibly-null pg_subscription_rel.srsublsn.
commit : 99b0c5da3e10a9f64ed2790ed34d8de3075edb20
author : Tom Lane <[email protected]>
date : Tue, 21 Jul 2020 11:40:47 -0400
committer: Tom Lane <[email protected]>
date : Tue, 21 Jul 2020 11:40:47 -0400
This coding technique is unsafe, since we'd be accessing off the end
of the tuple if the field is null. SIGSEGV is pretty improbable, but
perhaps not impossible. Also, returning garbage for the LSN doesn't
seem like a great idea, even if callers aren't looking at it today.
Also update docs to point out explicitly that
pg_subscription.subslotname and pg_subscription_rel.srsublsn
can be null.
Perhaps we should mark these two fields BKI_FORCE_NULL, so that
they'd be correctly labeled in databases that are initdb'd in the
future. But we can't force that for existing databases, and on
balance it's not too clear that having a mix of different catalog
contents in the field would be wise.
Apply to v10 (where this code came in) through v12. Already
fixed in v13 and HEAD.
Discussion: https://postgr.es/m/[email protected]
M doc/src/sgml/catalogs.sgml
M src/backend/catalog/pg_subscription.c
M src/include/catalog/pg_subscription_rel.h
Kluge slot_compile_deform() to ignore incorrect attnotnull markings.
commit : 855195a7ba9875648f958c42aba91ad382e82edd
author : Tom Lane <[email protected]>
date : Mon, 20 Jul 2020 15:54:24 -0400
committer: Tom Lane <[email protected]>
date : Mon, 20 Jul 2020 15:54:24 -0400
Since we mustn't force an initdb in released branches, there is no
simple way to correct the markings of pg_subscription.subslotname
and pg_subscription_rel.srsublsn as attnotnull in existing pre-v13
installations.
Fortunately, released branches don't rely on attnotnull being correct
for much. The planner looks at it in relation_excluded_by_constraints,
but it'd be difficult to get that to matter for a query on a system
catalog. The only place where it's really problematic is in JIT's
slot_compile_deform(), which can produce incorrect code that crashes
if there are NULLs in an allegedly not-null column.
Hence, hack up slot_compile_deform() to be specifically aware of
these two incorrect markings and not trust them.
This applies to v11 and v12; the JIT code didn't exist before that,
and we've fixed the markings in v13.
Discussion: https://postgr.es/m/[email protected]
M src/backend/jit/llvm/llvmjit_deform.c
M src/test/regress/expected/subscription.out
M src/test/regress/sql/subscription.sql
Fix construction of updated-columns bitmap in logical replication.
commit : e8de627a3e05e201ffb78ad7792d14fd25c857c8
author : Tom Lane <[email protected]>
date : Mon, 20 Jul 2020 13:40:16 -0400
committer: Tom Lane <[email protected]>
date : Mon, 20 Jul 2020 13:40:16 -0400
Commit b9c130a1f failed to apply the publisher-to-subscriber column
mapping while checking which columns were updated. Perhaps less
significantly, it didn't exclude dropped columns either. This could
result in an incorrect updated-columns bitmap and thus wrong decisions
about whether to fire column-specific triggers on the subscriber while
applying updates. In HEAD (since commit 9de77b545), it could also
result in accesses off the end of the colstatus array, as detected by
buildfarm member skink. Fix the logic, and adjust 003_constraints.pl
so that the problem is exposed in unpatched code.
In HEAD, also add some assertions to check that we don't access off
the ends of these newly variable-sized arrays.
Back-patch to v10, as b9c130a1f was.
Discussion: https://postgr.es/m/CAH2-Wz=79hKQ4++c5A060RYbjTHgiYTHz=fw6mptCtgghH2gJA@mail.gmail.com
M src/backend/replication/logical/worker.c
M src/test/subscription/t/003_constraints.pl
doc: Refresh more URLs in the docs
commit : dcd6718017943ad5bfbba7c3474992fa5a89d242
author : Michael Paquier <[email protected]>
date : Sat, 18 Jul 2020 22:43:49 +0900
committer: Michael Paquier <[email protected]>
date : Sat, 18 Jul 2020 22:43:49 +0900
This updates some URLs that are redirections, mostly to an equivalent
using https. One URL referring to generalized partial indexes was
outdated.
Author: Kyotaro Horiguchi
Discussion: https://postgr.es/m/[email protected]
Backpatch-through: 9.5
M doc/src/sgml/acronyms.sgml
M doc/src/sgml/biblio.sgml
M doc/src/sgml/config.sgml
M doc/src/sgml/cube.sgml
M doc/src/sgml/dfunc.sgml
M doc/src/sgml/earthdistance.sgml
M doc/src/sgml/external-projects.sgml
M doc/src/sgml/geqo.sgml
M doc/src/sgml/install-windows.sgml
M doc/src/sgml/intro.sgml
M doc/src/sgml/isn.sgml
M doc/src/sgml/monitoring.sgml
M doc/src/sgml/nls.sgml
M doc/src/sgml/pgcrypto.sgml
M doc/src/sgml/plperl.sgml
M doc/src/sgml/pltcl.sgml
M doc/src/sgml/seg.sgml
M doc/src/sgml/textsearch.sgml
Ensure that distributed timezone abbreviation files are plain ASCII.
commit : 85c4297a79b1ddeb297f4c03bd901db63cbd70ab
author : Tom Lane <[email protected]>
date : Fri, 17 Jul 2020 11:03:55 -0400
committer: Tom Lane <[email protected]>
date : Fri, 17 Jul 2020 11:03:55 -0400
We had two occurrences of "Mitteleuropäische Zeit" in Europe.txt,
though the corresponding entries in Default were spelled
"Mitteleuropaeische Zeit". Standardize on the latter spelling to
avoid questions of which encoding to use.
While here, correct a couple of other trivial inconsistencies between
the Default file and the supposedly-matching entries in the *.txt
files, as exposed by some checking with comm(1). Also, add BDST to
the Europe.txt file; it previously was only listed in Default.
None of this has any direct functional effect.
Per complaint from Christoph Berg. As usual for timezone data patches,
apply to all branches.
Discussion: https://postgr.es/m/[email protected]
M src/timezone/tznames/Antarctica.txt
M src/timezone/tznames/Australia.txt
M src/timezone/tznames/Default
M src/timezone/tznames/Europe.txt
Fix whitespace
commit : 5ca744cd5c46ae35ff59d6be865cd80f3a366b94
author : Peter Eisentraut <[email protected]>
date : Fri, 17 Jul 2020 15:16:13 +0200
committer: Peter Eisentraut <[email protected]>
date : Fri, 17 Jul 2020 15:16:13 +0200
M src/backend/utils/adt/genfile.c
Switch pg_test_fsync to use binary mode on Windows
commit : de559c2b06426e409bf7acf1c0d44a5f7d4550c3
author : Michael Paquier <[email protected]>
date : Thu, 16 Jul 2020 15:53:01 +0900
committer: Michael Paquier <[email protected]>
date : Thu, 16 Jul 2020 15:53:01 +0900
pg_test_fsync has always opened files using the text mode on Windows, as
this is the default mode used if not enforced by _setmode().
This fixes a failure when running pg_test_fsync down to 12 because
O_DSYNC and the text mode are not able to work together nicely. We
fixed the handling of O_DSYNC in 12~ for the tool by switching to the
concurrent-safe version of fopen() in src/port/ with 0ba06e0. And
40cfe86, by enforcing the text mode for compatibility reasons if O_TEXT
or O_BINARY are not specified by the caller, broke pg_test_fsync. For
all versions, this avoids any translation overhead, and pg_test_fsync
should test binary writes, so it is a gain in all cases.
Note that O_DSYNC is still not handled correctly in ~11, leading to
pg_test_fsync to show insanely high numbers for open_datasync() (using
this property it is easy to notice that the binary mode is much
faster). This would require a backpatch of 0ba06e0 and 40cfe86, which
could potentially break existing applications, so this is left out.
There are no TAP tests for this tool yet, so I have checked all builds
manually using MSVC. We could invent a new option to run a single
transaction instead of using a duration of 1s to make the tests a
maximum short, but this is left as future work.
Thanks to Bruce Momjian for the discussion.
Reported-by: Jeff Janes
Author: Michael Paquier
Discussion: https://postgr.es/m/[email protected]
Backpatch-through: 9.5
M src/bin/pg_test_fsync/pg_test_fsync.c
Replace use of sys_siglist[] with strsignal().
commit : c6d43ffab3c0b25f1d745a3c920ec515e7c9d935
author : Tom Lane <[email protected]>
date : Wed, 15 Jul 2020 22:05:12 -0400
committer: Tom Lane <[email protected]>
date : Wed, 15 Jul 2020 22:05:12 -0400
This commit back-patches the v12-era commits a73d08319, cc92cca43,
and 7570df0f3 into supported pre-v12 branches. The net effect is to
eliminate our former dependency on the never-standard sys_siglist[]
array, instead using POSIX-standard strsignal(3).
What motivates doing this now is that glibc just removed sys_siglist[]
from the set of symbols available to newly-built programs. While our
code can survive without sys_siglist[], it then fails to print any
description of the signal that killed a child process, which is a
non-negligible loss of friendliness. We can expect that people will
be wanting to build the back branches on platforms that include this
change, so we need to do something.
Since strsignal(3) has existed for quite a long time, and we've not
had any trouble with these patches so far in v12, it seems safe to
back-patch into older branches.
Discussion: https://postgr.es/m/[email protected]
M configure
M configure.in
M src/backend/postmaster/pgarch.c
M src/backend/postmaster/postmaster.c
M src/bin/pg_basebackup/pg_basebackup.c
M src/common/wait_error.c
M src/include/pg_config.h.in
M src/include/pg_config.h.win32
M src/include/port.h
M src/port/Makefile
A src/port/pgstrsignal.c
M src/test/regress/pg_regress.c
Fix handling of missing files when using pg_rewind with online source
commit : c6d33d14408664ccd1ebcd2f4e7dddd54cfe698e
author : Michael Paquier <[email protected]>
date : Wed, 15 Jul 2020 15:17:44 +0900
committer: Michael Paquier <[email protected]>
date : Wed, 15 Jul 2020 15:17:44 +0900
When working with an online source cluster, pg_rewind gets a list of all
the files in the source data directory using a WITH RECURSIVE query,
returning a NULL result for a file's metadata if it gets removed between
the moment it is listed in a directory and the moment its metadata is
obtained with pg_stat_file() (say a recycled WAL segment). The query
result was processed in such a way that for each tuple we checked only
that the first file's metadata was NULL. This could have two
consequences, both resulting in a failure of the rewind:
- If the first tuple referred to a removed file, all files from the
source would be ignored.
- Any file actually missing would not be considered as such.
While on it, rework slightly the code so as no values are saved if we
know that a file is going to be skipped.
Issue introduced by b36805f, so backpatch down to 9.5.
Author: Justin Pryzby, Michael Paquier
Reviewed-by: Daniel Gustafsson, Masahiko Sawada
Discussion: https://postgr.es/m/[email protected]
Backpatch-through: 9.5
M src/bin/pg_rewind/libpq_fetch.c
Fix bitmap AND/OR scans on the inside of a nestloop partition-wise join.
commit : e9f031172c6bc76978bf6708628010b65d1e9d99
author : Tom Lane <[email protected]>
date : Tue, 14 Jul 2020 18:56:49 -0400
committer: Tom Lane <[email protected]>
date : Tue, 14 Jul 2020 18:56:49 -0400
reparameterize_path_by_child() failed to reparameterize BitmapAnd
and BitmapOr paths. This matters only if such a path is chosen as
the inside of a nestloop partition-wise join, where we have to pass
in parameters from the outside of the nestloop. If that did happen,
we generated a bad plan that would likely lead to crashes at execution.
This is not entirely reparameterize_path_by_child()'s fault though;
it's the victim of an ancient decision (my ancient decision, I think)
to not bother filling in param_info in BitmapAnd/Or path nodes. That
caused the function to believe that such nodes and their children
contain no parameter references and so need not be processed.
In hindsight that decision looks pretty penny-wise and pound-foolish:
while it saves a few cycles during path node setup, we do commonly
need the information later. In particular, by reversing the decision
and requiring valid param_info data in all nodes of a bitmap path
tree, we can get rid of indxpath.c's get_bitmap_tree_required_outer()
function, which computed the data on-demand. It's not unlikely that
that nets out as a savings of cycles in many scenarios. A couple
of other things in indxpath.c can be simplified as well.
While here, get rid of some cases in reparameterize_path_by_child()
that are visibly dead or useless, given that we only care about
reparameterizing paths that can be on the inside of a parameterized
nestloop. This case reminds one of the maxim that untested code
probably does not work, so I'm unwilling to leave unreachable code
in this function. (I did leave the T_Gather case in place even
though it's not reached in the regression tests. It's not very
clear to me when the planner might prefer to put Gather below
rather than above a nestloop, but at least in principle the case
might be interesting.)
Per bug #16536, originally from Arne Roland but with a test case
by Andrew Gierth. Back-patch to v11 where this code came in.
Discussion: https://postgr.es/m/[email protected]
M src/backend/optimizer/path/indxpath.c
M src/backend/optimizer/util/pathnode.c
M src/test/regress/expected/partition_join.out
M src/test/regress/sql/partition_join.sql
Fix timing issue with ALTER TABLE's validate constraint
commit : d2761b680a9052b9d62912cfcc36c154f28517ce
author : David Rowley <[email protected]>
date : Tue, 14 Jul 2020 16:59:57 +1200
committer: David Rowley <[email protected]>
date : Tue, 14 Jul 2020 16:59:57 +1200
An ALTER TABLE to validate a foreign key in which another subcommand
already caused a pending table rewrite could fail due to ALTER TABLE
attempting to validate the foreign key before the actual table rewrite
takes place. This situation could result in an error such as:
ERROR: could not read block 0 in file "base/nnnnn/nnnnn": read only 0 of 8192 bytes
The failure here was due to the SPI call which validates the foreign key
trying to access an index which is yet to be rebuilt.
Similarly, we also incorrectly tried to validate CHECK constraints before
the heap had been rewritten.
The fix for both is to delay constraint validation until phase 3, after
the table has been rewritten. For CHECK constraints this means a slight
behavioral change. Previously ALTER TABLE VALIDATE CONSTRAINT on
inheritance tables would be validated from the bottom up. This was
different from the order of evaluation when a new CHECK constraint was
added. The changes made here aligns the VALIDATE CONSTRAINT evaluation
order for inheritance tables to be the same as ADD CONSTRAINT, which is
generally top-down.
Reported-by: Nazli Ugur Koyluoglu, using SQLancer
Discussion: https://postgr.es/m/CAApHDvp%3DZXv8wiRyk_0rWr00skhGkt8vXDrHJYXRMft3TjkxCA%40mail.gmail.com
Backpatch-through: 9.5 (all supported versions)
M src/backend/commands/tablecmds.c
M src/test/regress/expected/alter_table.out
M src/test/regress/sql/alter_table.sql
Cope with lateral references in the quals of a subquery RTE.
commit : 3753df8f8ae8e16bf81bc809514982b35a94f4a1
author : Tom Lane <[email protected]>
date : Mon, 13 Jul 2020 20:38:21 -0400
committer: Tom Lane <[email protected]>
date : Mon, 13 Jul 2020 20:38:21 -0400
The qual pushdown logic assumed that all Vars in a restriction clause
must be Vars referencing subquery outputs; but since we introduced
LATERAL, it's possible for such a Var to be a lateral reference instead.
This led to an assertion failure in debug builds. In a non-debug
build, there might be no ill effects (if qual_is_pushdown_safe decided
the qual was unsafe anyway), or we could get failures later due to
construction of an invalid plan. I've not gone to much length to
characterize the possible failures, but at least segfaults in the
executor have been observed.
Given that this has been busted since 9.3 and it took this long for
anybody to notice, I judge that the case isn't worth going to great
lengths to optimize. Hence, fix by just teaching qual_is_pushdown_safe
that such quals are unsafe to push down, matching the previous behavior
when it accidentally didn't fail.
Per report from Tom Ellis. Back-patch to all supported branches.
Discussion: https://postgr.es/m/20200713175124.GQ8220@cloudinit-builder
M src/backend/optimizer/path/allpaths.c
M src/test/regress/expected/subselect.out
M src/test/regress/sql/subselect.sql
Avoid trying to restore table ACLs and per-column ACLs in parallel.
commit : 4fdc559c88eb53ba12fc4c59a633d2bee0dbf8a2
author : Tom Lane <[email protected]>
date : Sat, 11 Jul 2020 13:36:50 -0400
committer: Tom Lane <[email protected]>
date : Sat, 11 Jul 2020 13:36:50 -0400
Parallel pg_restore has always supposed that ACL items for different
objects are independent and can be restored in parallel without
conflicts. However, there is one case where this fails: because
REVOKE on a table is defined to also revoke the privilege(s) at
column level, we can't restore per-column ACLs till after we restore
any table-level privileges on their table. Failure to honor this
restriction can lead to "tuple concurrently updated" errors during
parallel restore, or even to the per-column ACLs silently disappearing
because the table-level REVOKE is executed afterwards.
To fix, add a dependency from each column-level ACL item to its table's
ACL item, if there is one. Note that this doesn't fix the hazard
for pre-existing archive files, only for ones made with a corrected
pg_dump. Given that the bug's been there quite awhile without
field reports, I think this is acceptable.
This requires changing the API of pg_dump's dumpACL() function.
To keep its argument list from getting even longer, I removed the
"CatalogId objCatId" argument, which has been unused for ages.
Per report from Justin Pryzby. Back-patch to all supported branches.
Discussion: https://postgr.es/m/[email protected]
M src/bin/pg_dump/common.c
M src/bin/pg_dump/pg_backup.h
M src/bin/pg_dump/pg_dump.c
Doc: update or remove dead external links.
commit : 0ecd36ee0e49250048f038c81fbc12b4102caa7e
author : Tom Lane <[email protected]>
date : Fri, 10 Jul 2020 13:16:00 -0400
committer: Tom Lane <[email protected]>
date : Fri, 10 Jul 2020 13:16:00 -0400
Re-point comp.ai.genetic FAQ link to a more stable address.
Remove stale links to AIX documentation; we don't really need to
tell AIX users how to use their systems.
Remove stale links to HP documentation about SSL. We've had to
update those twice before, making it increasingly obvious that
HP does not intend them to be stable landing points. They're
not particularly authoritative, either. (This change effectively
reverts bbd3bdba3.)
Daniel Gustafsson and Álvaro Herrera, per a gripe from
Kyotaro Horiguchi. Back-patch, since these links are
just as dead in the back branches.
Discussion: https://postgr.es/m/[email protected]
M doc/src/sgml/geqo.sgml
M doc/src/sgml/installation.sgml
M doc/src/sgml/libpq.sgml
M doc/src/sgml/runtime.sgml
Remove WARNING message from brin_desummarize_range
commit : 907283576da53ab654f2124cec5242524e8920b1
author : Alvaro Herrera <[email protected]>
date : Thu, 9 Jul 2020 20:13:25 -0400
committer: Alvaro Herrera <[email protected]>
date : Thu, 9 Jul 2020 20:13:25 -0400
This message was being emitted on the grounds that only crashed
summarization could cause it, but in reality even an aborted vacuum
could do it ... which makes it way too noisy, particularly since it
shows up in regression tests and makes them die.
Reported by Tom Lane.
Discussion: https://postgr.es/m/[email protected]
M src/backend/access/brin/brin_revmap.c
Tighten up Windows CRLF conversion in our TAP test scripts.
commit : 89162b7364bf7831cde458a9a298c060256dc59a
author : Tom Lane <[email protected]>
date : Thu, 9 Jul 2020 17:38:52 -0400
committer: Tom Lane <[email protected]>
date : Thu, 9 Jul 2020 17:38:52 -0400
Back-patch commits 91bdf499b and ffb4cee43, so that all branches
agree on when and how to do Windows CRLF conversion.
This should close the referenced thread. Thanks to Andrew Dunstan
for discussion/review.
Discussion: https://postgr.es/m/[email protected]
M src/bin/pg_rewind/t/RewindTest.pm
M src/test/perl/PostgresNode.pm
M src/test/perl/TestLib.pm
Fix pg_current_logfile() to not emit a carriage return on Windows.
commit : 90b418f81645f6a3a4162dad7628481a5d1a7415
author : Tom Lane <[email protected]>
date : Thu, 9 Jul 2020 16:02:23 -0400
committer: Tom Lane <[email protected]>
date : Thu, 9 Jul 2020 16:02:23 -0400
Due to not having our signals straight about CRLF vs. LF line
termination, the output of pg_current_logfile() included a trailing
\r on Windows. To fix, force the file descriptor it uses into text
mode.
While here, move a couple of local variable declarations to make
the function's logic clearer.
In v12 and v13, also back-patch the test added by 1c4e88e2f so that
this function has some test coverage. However, the 004_logrotate.pl
test script doesn't exist before v12, and it didn't seem worth adding
to older branches just for this.
Per report from Thomas Kellerer. Back-patch to v10 where this
function was added.
Discussion: https://postgr.es/m/[email protected]
M src/backend/utils/adt/misc.c
doc: Correct the description about the length of pg_stat_activity.query.
commit : 08952572a7d6197393051f881a880be4223c7291
author : Fujii Masao <[email protected]>
date : Thu, 9 Jul 2020 13:31:33 +0900
committer: Fujii Masao <[email protected]>
date : Thu, 9 Jul 2020 13:31:33 +0900
pg_stat_activity.query text is truncated at 1024 bytes. But previously
the document described that it's truncated at 1024 characters.
This was not accurate when considering multibyte characters.
Back-patch to v10 where this inaccurate description was added.
Author: Atsushi Torikoshi
Reviewed-by: Daniel Gustafsson, Fujii Masao
Discussion: https://postgr.es/m/[email protected]
M doc/src/sgml/monitoring.sgml
doc: Fix incorrect reference to textout in plpgsql examples
commit : d51155544befc48cacfda3ad28ba64bdee3161e8
author : Michael Paquier <[email protected]>
date : Sun, 5 Jul 2020 19:36:22 +0900
committer: Michael Paquier <[email protected]>
date : Sun, 5 Jul 2020 19:36:22 +0900
This error has survived for 22 years, and has been introduced by
da63386.
Reported-by: Erwin Brandstetter
Discussion: https://postgr.es/m/CAGHENJ57wogGOvGXo5LgWYcqswxafLck8ELqHDR+zrkTPgs_OQ@mail.gmail.com
Backpatch-through: 9.5
M doc/src/sgml/plpgsql.sgml
Fix "ignoring return value" complaints from commit 96d1f423f9
commit : 1243aa9b2f2e8a23f5fbace2b038b962bf79e9f0
author : Joe Conway <[email protected]>
date : Sat, 4 Jul 2020 13:47:31 -0400
committer: Joe Conway <[email protected]>
date : Sat, 4 Jul 2020 13:47:31 -0400
The cfbot and some BF animals are complaining about the previous
read_binary_file commit because of ignoring return value of ‘fread’.
So let's make everyone happy by testing the return value even though
not strictly needed.
Reported by Justin Pryzby, and suggested patch by Tom Lane. Backpatched
to v11 same as the previous commit.
Reported-By: Justin Pryzby
Reviewed-By: Tom Lane
Discussion: https://postgr.es/m/flat/969b8d82-5bb2-5fa8-4eb1-f0e685c5d736%40joeconway.com
Backpatch-through: 11
M src/backend/utils/adt/genfile.c
Read until EOF vice stat-reported size in read_binary_file
commit : c2cdaf0cb912fa24ac56170c7c47a2fc398e2516
author : Joe Conway <[email protected]>
date : Sat, 4 Jul 2020 06:29:03 -0400
committer: Joe Conway <[email protected]>
date : Sat, 4 Jul 2020 06:29:03 -0400
read_binary_file(), used by SQL functions pg_read_file() and friends,
uses stat to determine file length to read, when not passed an explicit
length as an argument. This is problematic, for example, if the file
being read is a virtual file with a stat-reported length of zero.
Arrange to read until EOF, or StringInfo data string lenth limit, is
reached instead.
Original complaint and patch by me, with significant review, corrections,
advice, and code optimizations by Tom Lane. Backpatched to v11. Prior to
that only paths relative to the data and log dirs were allowed for files,
so no "zero length" files were reachable anyway.
Reviewed-By: Tom Lane
Discussion: https://postgr.es/m/flat/969b8d82-5bb2-5fa8-4eb1-f0e685c5d736%40joeconway.com
Backpatch-through: 11
M contrib/adminpack/expected/adminpack.out
M src/backend/utils/adt/genfile.c
Clamp total-tuples estimates for foreign tables to ensure planner sanity.
commit : ef799bdd04ee7f5d5c5fb2547633ef98c4949cfb
author : Tom Lane <[email protected]>
date : Fri, 3 Jul 2020 19:01:21 -0400
committer: Tom Lane <[email protected]>
date : Fri, 3 Jul 2020 19:01:21 -0400
After running GetForeignRelSize for a foreign table, adjust rel->tuples
to be at least as large as rel->rows. This prevents bizarre behavior
in estimate_num_groups() and perhaps other places, especially in the
scenario where rel->tuples is zero because pg_class.reltuples is
(suggesting that ANALYZE has never been run for the table). As things
stood, we'd end up estimating one group out of any GROUP BY on such a
table, whereas the default group-count estimate is more likely to result
in a sane plan.
Also, clarify in the documentation that GetForeignRelSize has the option
to override the rel->tuples value if it has a better idea of what to use
than what is in pg_class.reltuples.
Per report from Jeff Janes. Back-patch to all supported branches.
Patch by me; thanks to Etsuro Fujita for review
Discussion: https://postgr.es/m/CAMkU=1xNo9cnan+Npxgz0eK7394xmjmKg-QEm8wYG9P5-CcaqQ@mail.gmail.com
M doc/src/sgml/fdwhandler.sgml
M src/backend/optimizer/path/allpaths.c
Fix temporary tablespaces for shared filesets some more.
commit : 79ed1d99d7ce4827c566c5b2bc1cf1528e8add36
author : Tom Lane <[email protected]>
date : Fri, 3 Jul 2020 17:01:34 -0400
committer: Tom Lane <[email protected]>
date : Fri, 3 Jul 2020 17:01:34 -0400
Commit ecd9e9f0b fixed the problem in the wrong place, causing unwanted
side-effects on the behavior of GetNextTempTableSpace(). Instead,
let's make SharedFileSetInit() responsible for subbing in the value
of MyDatabaseTableSpace when the default tablespace is called for.
The convention about what is in the tempTableSpaces[] array is
evidently insufficiently documented, so try to improve that.
It also looks like SharedFileSetInit() is doing the wrong thing in the
case where temp_tablespaces is empty. It was hard-wiring use of the
pg_default tablespace, but it seems like using MyDatabaseTableSpace
is more consistent with what happens for other temp files.
Back-patch the reversion of PrepareTempTablespaces()'s behavior to
9.5, as ecd9e9f0b was. The changes in SharedFileSetInit() go back
to v11 where that was introduced. (Note there is net zero code change
before v11 from these two patch sets, so nothing to release-note.)
Magnus Hagander and Tom Lane
Discussion: https://postgr.es/m/CABUevExg5YEsOvqMxrjoNvb3ApVyH+9jggWGKwTDFyFCVWczGQ@mail.gmail.com
M src/backend/commands/tablespace.c
M src/backend/storage/file/fd.c
M src/backend/storage/file/sharedfileset.c
Fix temporary tablespaces for shared filesets
commit : 4aa02d0729f01e6f381a2ffbf052a0d54dcbdb82
author : Magnus Hagander <[email protected]>
date : Fri, 3 Jul 2020 15:09:06 +0200
committer: Magnus Hagander <[email protected]>
date : Fri, 3 Jul 2020 15:09:06 +0200
A likely copy/paste error in 98e8b480532 from back in 2004 would
cause temp tablespace to be reset to InvalidOid if temp_tablespaces
was set to the same value as the primary tablespace in the database.
This would cause shared filesets (such as for parallel hash joins)
to ignore them, putting the temporary files in the default tablespace
instead of the configured one. The bug is in the old code, but it
appears to have been exposed only once we had shared filesets.
Reviewed-By: Daniel Gustafsson
Discussion: https://postgr.es/m/CABUevExg5YEsOvqMxrjoNvb3ApVyH+9jggWGKwTDFyFCVWczGQ@mail.gmail.com
Backpatch-through: 9.5
M src/backend/commands/tablespace.c
doc: clarify that storage parameter values are optional
commit : 81b244e78b637b16ddb7a33bc5fb7448b6c45c39
author : Bruce Momjian <[email protected]>
date : Tue, 30 Jun 2020 12:26:51 -0400
committer: Bruce Momjian <[email protected]>
date : Tue, 30 Jun 2020 12:26:51 -0400
In a few cases, the documented syntax specified storage parameter values
as required.
Reported-by: [email protected]
Discussion: https://postgr.es/m/[email protected]
Backpatch-through: 9.5
M doc/src/sgml/ref/alter_index.sgml
M doc/src/sgml/ref/alter_materialized_view.sgml
M doc/src/sgml/ref/alter_table.sgml
M doc/src/sgml/ref/create_index.sgml
doc: change pg_upgrade wal_level to be not minimal
commit : 457942e18853f168f03c4bae4b4c0dce494f68e2
author : Bruce Momjian <[email protected]>
date : Tue, 30 Jun 2020 11:55:53 -0400
committer: Bruce Momjian <[email protected]>
date : Tue, 30 Jun 2020 11:55:53 -0400
Previously it was specified to be only replica.
Discussion: https://postgr.es/m/[email protected]
Backpatch-through: 9.5
M doc/src/sgml/ref/pgupgrade.sgml
Fix documentation of "must be vacuumed within" warning.
commit : b2bf22c1e58958527b7ec88aa071425c1e68e578
author : Noah Misch <[email protected]>
date : Sat, 27 Jun 2020 22:05:04 -0700
committer: Noah Misch <[email protected]>
date : Sat, 27 Jun 2020 22:05:04 -0700
Warnings start 10M transactions before xidStopLimit, which is 11M
transactions before wraparound. The sample WARNING output showed a
value greater than 11M, and its HINT message predated commit
25ec228ef760eb91c094cc3b6dea7257cc22ffb5. Hence, the sample was
impossible. Back-patch to 9.5 (all supported versions).
M doc/src/sgml/maintenance.sgml
doc: mention trigger helper functions in CREATE TRIGGER docs
commit : 4a12bfe21af8837fb9f1623831efc56ab65c4e73
author : Bruce Momjian <[email protected]>
date : Thu, 25 Jun 2020 18:33:28 -0400
committer: Bruce Momjian <[email protected]>
date : Thu, 25 Jun 2020 18:33:28 -0400
Reported-by: [email protected]
Discussion: https://postgr.es/m/[email protected]
Backpatch-through: 9.5
M doc/src/sgml/ref/create_trigger.sgml
docs: clarify that CREATE DATABASE does not copy db permissions
commit : bf4f195925c904a442fad10f3ff7bad4438a8cf5
author : Bruce Momjian <[email protected]>
date : Thu, 25 Jun 2020 18:22:44 -0400
committer: Bruce Momjian <[email protected]>
date : Thu, 25 Jun 2020 18:22:44 -0400
That is, those database permissions set by GRANT.
Diagnosed-by: Joseph Nahmias
Discussion: https://postgr.es/m/[email protected]
Backpatch-through: 9.5
M doc/src/sgml/ref/create_database.sgml
Fix compiler warning induced by commit d8b15eeb8.
commit : 684325566d3574887082a55a1a1292cbdbef2e1c
author : Tom Lane <[email protected]>
date : Wed, 24 Jun 2020 15:47:30 -0400
committer: Tom Lane <[email protected]>
date : Wed, 24 Jun 2020 15:47:30 -0400
I forgot that INT64_FORMAT can't be used with sscanf on Windows.
Use the same trick of sscanf'ing into a temp variable as we do in
some other places in zic.c.
The upstream IANA code avoids the portability problem by relying on
<inttypes.h>'s SCNdFAST64 macro. Once we're requiring C99 in all
branches, we should do likewise and drop this set of diffs from
upstream. For now, though, a hack seems fine, since we do not
actually care about leapseconds anyway.
Discussion: https://postgr.es/m/[email protected]
M src/timezone/zic.c
Add parens to ConvertToXSegs macro
commit : 5c215c941c3f6d6d2f5faf7bef6262373594977c
author : Alvaro Herrera <[email protected]>
date : Wed, 24 Jun 2020 13:57:21 -0400
committer: Alvaro Herrera <[email protected]>
date : Wed, 24 Jun 2020 13:57:21 -0400
The current definition (introduced in 9a3215026bd6) is dangerous. No
bugs exist in our code at present, but backpatch to 11 nonetheless,
where that commit debuted.
Author: Álvaro Herrera <[email protected]>
M src/backend/access/transam/xlog.c
Undo double-quoting of index names in non-text EXPLAIN output formats.
commit : 35a8e227e6c6d566f47436555730fef711691dd6
author : Tom Lane <[email protected]>
date : Mon, 22 Jun 2020 11:46:41 -0400
committer: Tom Lane <[email protected]>
date : Mon, 22 Jun 2020 11:46:41 -0400
explain_get_index_name() applied quote_identifier() to the index name.
This is fine for text output, but the non-text output formats all have
their own quoting conventions and would much rather start from the
actual index name. For example in JSON you'd get something like
"Index Name": "\"My Index\"",
which is surely not desirable, especially when the same does not
happen for table names. Hence, move the responsibility for applying
quoting out to the callers, where it can go into already-existing
special code paths for text format.
This changes the API spec for users of explain_get_index_name_hook:
before, they were supposed to apply quote_identifier() if necessary,
now they should not. Research suggests that the only publicly
available user of the hook is hypopg, and it actually forgot to
apply quoting anyway, so it's fine. (In any case, there's no
behavioral change for the output of a hook as seen in non-text
EXPLAIN formats, so this won't break any case that programs should
be relying on.)
Digging in the commit logs, it appears that quoting was included in
explain_get_index_name's duties when commit 604ffd280 invented it;
and that was fine at the time because we only had text output format.
This should have been rethought when non-text formats were invented,
but it wasn't.
This is a fairly clear bug for users of non-text EXPLAIN formats,
so back-patch to all supported branches.
Per bug #16502 from Maciek Sakrejda. Patch by me (based on
investigation by Euler Taveira); thanks to Julien Rouhaud for review.
Discussion: https://postgr.es/m/[email protected]
M src/backend/commands/explain.c
Fix masking of SP-GiST pages during xlog consistency check
commit : 3f88e2d78dbe61b8eec8dfb051b9dc0d1ff0052f
author : Alexander Korotkov <[email protected]>
date : Sat, 20 Jun 2020 17:34:51 +0300
committer: Alexander Korotkov <[email protected]>
date : Sat, 20 Jun 2020 17:34:51 +0300
spg_mask() didn't take into account that pd_lower equal to SizeOfPageHeaderData
is still valid value. This commit fixes that. Backpatch to 11, where
spg_mask() pg_lower check was introduced.
Reported-by: Michael Paquier
Discussion: https://postgr.es/m/20200615131405.GM52676%40paquier.xyz
Backpatch-through: 11
M src/backend/access/spgist/spgxlog.c
Ensure write failure reports no-disk-space
commit : 2e155d90d1b867f7b5bf9616236386eb1e0f40ff
author : Alvaro Herrera <[email protected]>
date : Fri, 19 Jun 2020 16:46:07 -0400
committer: Alvaro Herrera <[email protected]>
date : Fri, 19 Jun 2020 16:46:07 -0400
A few places calling fwrite and gzwrite were not setting errno to ENOSPC
when reporting errors, as is customary; this led to some failures being
reported as
"could not write file: Success"
which makes us look silly. Make a few of these places in pg_dump and
pg_basebackup use our customary pattern.
Backpatch-to: 9.5
Author: Justin Pryzby <[email protected]>
Author: Tom Lane <[email protected]>
Author: Álvaro Herrera <[email protected]>
Discussion: https://postgr.es/m/[email protected]
M src/bin/pg_basebackup/pg_basebackup.c
M src/bin/pg_dump/pg_backup_directory.c
Future-proof regression tests against possibly-missing posixrules file.
commit : e7c183cd1fd1a7b2fb7ebbe1084bac836fbefac7
author : Tom Lane <[email protected]>
date : Fri, 19 Jun 2020 13:55:21 -0400
committer: Tom Lane <[email protected]>
date : Fri, 19 Jun 2020 13:55:21 -0400
The IANA time zone folk have deprecated use of a "posixrules" file in
the tz database. While for now it's our choice whether to keep
supplying one in our own builds, installations built with
--with-system-tzdata will soon be needing to cope with that file not
being present, at least on some platforms.
This causes a problem for the horology test, which expected the
nonstandard POSIX zone spec "CST7CDT" to apply pre-2007 US daylight
savings rules. That does happen if the posixrules file supplies such
information, but otherwise the test produces undesired results.
To fix, add an explicit transition date rule that matches 2005 practice.
(We could alternatively have switched the test to use some real time
zone, but it seems useful to have coverage of this type of zone spec.)
While at it, update a documentation example that also relied on
"CST7CDT"; use a real-world zone name instead. Also, document why
the zone names EST5EDT, CST6CDT, MST7MDT, PST8PDT aren't subject to
similar failures when "posixrules" is missing.
Back-patch to all supported branches, since the hazard is the same
for all.
Discussion: https://postgr.es/m/[email protected]
M doc/src/sgml/datetime.sgml
M doc/src/sgml/func.sgml
M src/test/regress/expected/horology.out
M src/test/regress/sql/horology.sql
Fix C99isms introduced when backpatching atomics / spinlock tests.
commit : e6ba7056b499a566af7c792794a5c6f51620c866
author : Andres Freund <[email protected]>
date : Thu, 18 Jun 2020 15:12:09 -0700
committer: Andres Freund <[email protected]>
date : Thu, 18 Jun 2020 15:12:09 -0700
M src/test/regress/regress.c
Fix deadlock danger when atomic ops are done under spinlock.
commit : 825d89dda5add2eecdc26fa36365720b22c72b71
author : Andres Freund <[email protected]>
date : Mon, 8 Jun 2020 16:50:37 -0700
committer: Andres Freund <[email protected]>
date : Mon, 8 Jun 2020 16:50:37 -0700
This was a danger only for --disable-spinlocks in combination with
atomic operations unsupported by the current platform.
While atomics.c was careful to signal that a separate semaphore ought
to be used when spinlock emulation is active, spin.c didn't actually
implement that mechanism. That's my (Andres') fault, it seems to have
gotten lost during the development of the atomic operations support.
Fix that issue and add test for nesting atomic operations inside a
spinlock.
Author: Andres Freund
Discussion: https://postgr.es/m/[email protected]
Backpatch: 9.5-
M src/backend/storage/lmgr/spin.c
M src/test/regress/regress.c
Add basic spinlock tests to regression tests.
commit : e027219f213111743a51e19e9febface5871af76
author : Andres Freund <[email protected]>
date : Mon, 8 Jun 2020 16:36:51 -0700
committer: Andres Freund <[email protected]>
date : Mon, 8 Jun 2020 16:36:51 -0700
As s_lock_test, the already existing test for spinlocks, isn't run in
an automated fashion (and doesn't test a normal backend environment),
adding tests that are run as part of a normal regression run is a good
idea. Particularly in light of several recent and upcoming spinlock
related fixes.
Currently the new tests are run as part of the pre-existing
test_atomic_ops() test. That perhaps can be quibbled about, but for
now seems ok.
The only operations that s_lock_test tests but the new tests don't are
the detection of a stuck spinlock and S_LOCK_FREE (which is otherwise
unused, not implemented on all platforms, and will be removed).
This currently contains a test for more than INT_MAX spinlocks (only
run with --disable-spinlocks), to ensure the recent commit fixing a
bug with more than INT_MAX spinlock initializations is correct. That
test is somewhat slow, so we might want to disable it after a few
days.
It might be worth retiring s_lock_test after this. The added coverage
of a stuck spinlock probably isn't worth the added complexity?
Author: Andres Freund
Discussion: https://postgr.es/m/[email protected]
M src/test/regress/regress.c
Doc: document POSIX-style time zone specifications in full.
commit : 070f49005350131a62399b9b29bff61f8adaefff
author : Tom Lane <[email protected]>
date : Thu, 18 Jun 2020 16:27:18 -0400
committer: Tom Lane <[email protected]>
date : Thu, 18 Jun 2020 16:27:18 -0400
We'd glossed over most of this complexity for years, but it's hard
to avoid writing it all down now, so that we can explain what happens
when there's no "posixrules" file in the IANA time zone database.
That was at best a tiny minority situation till now, but it's likely
to become quite common in the future, so we'd better explain it.
Nonetheless, we don't really encourage people to use POSIX zone specs;
picking a named zone is almost always what you really want, unless
perhaps you're stuck with an out-of-date zone database. Therefore,
let's shove all this detail into an appendix.
Patch by me; thanks to Robert Haas for help with some awkward wording.
Discussion: https://postgr.es/m/[email protected]
M doc/src/sgml/datatype.sgml
M doc/src/sgml/datetime.sgml
Fix oldest xmin and LSN computation across repslots after advancing
commit : 1657e14b50d23cdf8bb9fec0a4e5d9cc0b7b265e
author : Michael Paquier <[email protected]>
date : Thu, 18 Jun 2020 16:35:36 +0900
committer: Michael Paquier <[email protected]>
date : Thu, 18 Jun 2020 16:35:36 +0900
Advancing a replication slot did not recompute the oldest xmin and LSN
values across replication slots, preventing resource removal like
segments not recycled at checkpoint time. The original commit that
introduced the slot advancing in 9c7d06d never did the update of those
oldest values, and b0afdca removed this code.
This commit adds a TAP test to check segment recycling with advancing
for physical slots, enforcing an extra segment switch before advancing
to check if the segment gets correctly recycled after a checkpoint.
Reported-by: Andres Freund
Reviewed-by: Alexey Kondratov, Kyptaro Horiguchi
Discussion: https://postgr.es/m/[email protected]
Backpatch-through: 11
M src/backend/replication/slotfuncs.c
M src/test/recovery/t/001_stream_rep.pl
Sync our copy of the timezone library with IANA release tzcode2020a.
commit : 3ced1dd6c479389b4000ae484a12b11e8d77b844
author : Tom Lane <[email protected]>
date : Wed, 17 Jun 2020 18:29:29 -0400
committer: Tom Lane <[email protected]>
date : Wed, 17 Jun 2020 18:29:29 -0400
This absorbs a leap-second-related bug fix in localtime.c, and
teaches zic to handle an expiration marker in the leapseconds file.
Neither are of any interest to us (for the foreseeable future
anyway), but we need to stay more or less in sync with upstream.
Also adjust some over-eager changes in the README from commit 957338418.
I have no intention of making changes that require C99 in this code,
until such time as all the live back branches require C99. Otherwise
back-patching will get too exciting.
For the same reason, absorb assorted whitespace and other cosmetic
changes from HEAD into the back branches; mostly this reflects use of
improved versions of pgindent.
All in all then, quite a boring update. But I figured I'd get it
done while I was looking at this code.
M src/timezone/README
M src/timezone/localtime.c
M src/timezone/pgtz.c
M src/timezone/pgtz.h
M src/timezone/strftime.c
M src/timezone/zic.c
spinlock emulation: Fix bug when more than INT_MAX spinlocks are initialized.
commit : 34d29222a0bbfd6dd2deecdd91aa202a7b6c3f18
author : Andres Freund <[email protected]>
date : Mon, 8 Jun 2020 15:25:49 -0700
committer: Andres Freund <[email protected]>
date : Mon, 8 Jun 2020 15:25:49 -0700
Once the counter goes negative we ended up with spinlocks that errored
out on first use (due to check in tas_sema).
Author: Andres Freund
Reviewed-By: Robert Haas
Discussion: https://postgr.es/m/[email protected]
Backpatch: 9.5-
M src/backend/storage/lmgr/spin.c
Doc: fix copy-and-pasteo in ecpg docs.
commit : 3d73d264e7efdb0bdf4633488039232b280995a6
author : Tom Lane <[email protected]>
date : Tue, 16 Jun 2020 16:41:11 -0400
committer: Tom Lane <[email protected]>
date : Tue, 16 Jun 2020 16:41:11 -0400
The synopsis for PGTYPESinterval_free() used the wrong name.
Discussion: https://postgr.es/m/[email protected]
M doc/src/sgml/ecpg.sgml
Fix buffile.c error handling.
commit : 9c14d602436543067f1a5403cff2f8c2e6f13403
author : Thomas Munro <[email protected]>
date : Tue, 16 Jun 2020 13:50:56 +1200
committer: Thomas Munro <[email protected]>
date : Tue, 16 Jun 2020 13:50:56 +1200
Convert buffile.c error handling to use ereport. This fixes cases where
I/O errors were indistinguishable from EOF or not reported. Also remove
"%m" from error messages where errno would be bogus. While we're
modifying those strings, add block numbers and short read byte counts
where appropriate.
Back-patch to all supported releases.
Reported-by: Amit Khandekar <[email protected]>
Reviewed-by: Melanie Plageman <[email protected]>
Reviewed-by: Alvaro Herrera <[email protected]>
Reviewed-by: Robert Haas <[email protected]>
Reviewed-by: Ibrar Ahmed <[email protected]>
Reviewed-by: Michael Paquier <[email protected]>
Discussion: https://postgr.es/m/CA%2BhUKGJE04G%3D8TLK0DLypT_27D9dR8F1RQgNp0jK6qR0tZGWOw%40mail.gmail.com
M src/backend/access/gist/gistbuildbuffers.c
M src/backend/executor/nodeHashjoin.c
M src/backend/storage/file/buffile.c
M src/backend/utils/sort/logtape.c
M src/backend/utils/sort/sharedtuplestore.c
M src/backend/utils/sort/tuplestore.c
pg_upgrade: set vacuum_defer_cleanup_age to zero
commit : aeb785c0f3659b6d7e611167d943f9c2aa636339
author : Bruce Momjian <[email protected]>
date : Mon, 15 Jun 2020 20:59:40 -0400
committer: Bruce Momjian <[email protected]>
date : Mon, 15 Jun 2020 20:59:40 -0400
Non-zero vacuum_defer_cleanup_age values cause pg_upgrade freezing of
the system catalogs to be incomplete, or do nothing. This will cause
the upgrade to fail in confusing ways.
Reported-by: Laurenz Albe
Discussion: https://postgr.es/m/[email protected]
Backpatch-through: 9.5
M src/bin/pg_upgrade/server.c
Doc: Add references for SI and SSI.
commit : 648e56d3984d7957ef7a9480d3d053fc7d65369a
author : Thomas Munro <[email protected]>
date : Mon, 15 Jun 2020 11:33:13 +1200
committer: Thomas Munro <[email protected]>
date : Mon, 15 Jun 2020 11:33:13 +1200
Our documentation failed to point out that REPEATABLE READ is really
snapshot isolation, which might be important to some users. Point to
the standard reference paper for this complicated topic.
Likewise, add a reference to the VLDB paper about PostgreSQL SSI, for
technical information about our SSI implementation and how it compares
to S2PL.
While here, add a note about catalog access using a lower isolation
level, per recent user complaint.
Back-patch to all releases.
Reported-by: Kyle Kingsbury <[email protected]>
Reviewed-by: Andres Freund <[email protected]>
Reviewed-by: Peter Geoghegan <[email protected]>
Reviewed-by: Tatsuo Ishii <[email protected]>
Discussion: https://postgr.es/m/db7b729d-0226-d162-a126-8a8ab2dc4443%40jepsen.io
Discussion: https://postgr.es/m/16454-9408996bb1750faf%40postgresql.org
M doc/src/sgml/biblio.sgml
M doc/src/sgml/mvcc.sgml
doc: remove xreflabels from commits 75fcdd2ae2 and 85af628da5
commit : da0a60c3d73bb057503a4dc17ca508b88bb5a195
author : Bruce Momjian <[email protected]>
date : Thu, 11 Jun 2020 18:19:25 -0400
committer: Bruce Momjian <[email protected]>
date : Thu, 11 Jun 2020 18:19:25 -0400
xreflabels prevent references to the chapter numbers of sections id's.
It should only be used in specific cases.
Discussion: https://postgr.es/m/[email protected]
Backpatch-through: 9.5
M doc/src/sgml/ecpg.sgml
M doc/src/sgml/geqo.sgml
M doc/src/sgml/gin.sgml
M doc/src/sgml/gist.sgml
M doc/src/sgml/libpq.sgml
M doc/src/sgml/maintenance.sgml
M doc/src/sgml/plperl.sgml
M doc/src/sgml/plpgsql.sgml
M doc/src/sgml/plpython.sgml
M doc/src/sgml/spgist.sgml
M doc/src/sgml/spi.sgml
M doc/src/sgml/storage.sgml
M doc/src/sgml/vacuumlo.sgml
Fix mishandling of NaN counts in numeric_[avg_]combine.
commit : 49e0a42dd584d665adc0182f1f0bb8eb848498d1
author : Tom Lane <[email protected]>
date : Thu, 11 Jun 2020 17:38:42 -0400
committer: Tom Lane <[email protected]>
date : Thu, 11 Jun 2020 17:38:42 -0400
When merging two NumericAggStates, the code missed adding the new
state's NaNcount unless its N was also nonzero; since those counts
are independent, this is wrong.
This would only have visible effect if some partial aggregate scans
found only NaNs while earlier ones found only non-NaNs; then we could
end up falsely deciding that there were no NaNs and fail to return a
NaN final result as expected. That's pretty improbable, so it's no
surprise this hasn't been reported from the field. Still, it's a bug.
I didn't try to produce a regression test that would show the bug,
but I did notice that these functions weren't being reached at all
in our regression tests, so I improved the tests to at least
exercise them. With these additions, I see pretty complete code
coverage on the aggregation-related functions in numeric.c.
Back-patch to 9.6 where this code was introduced. (I only added
the improved test case as far back as v10, though, since the
relevant part of aggregates.sql isn't there at all in 9.6.)
M src/backend/utils/adt/numeric.c
M src/test/regress/expected/aggregates.out
M src/test/regress/sql/aggregates.sql
Avoid update conflict out serialization anomalies.
commit : dd616f2ec1c517da4e6de2801f6386d01d098840
author : Peter Geoghegan <[email protected]>
date : Thu, 11 Jun 2020 10:09:40 -0700
committer: Peter Geoghegan <[email protected]>
date : Thu, 11 Jun 2020 10:09:40 -0700
SSI's HeapCheckForSerializableConflictOut() test failed to correctly
handle conditions involving a concurrently inserted tuple which is later
concurrently updated by a separate transaction . A SELECT statement
that called HeapCheckForSerializableConflictOut() could end up using the
same XID (updater's XID) for both the original tuple, and the successor
tuple, missing the XID of the xact that created the original tuple
entirely. This only happened when neither tuple from the chain was
visible to the transaction's MVCC snapshot.
The observable symptoms of this bug were subtle. A pair of transactions
could commit, with the later transaction failing to observe the effects
of the earlier transaction (because of the confusion created by the
update to the non-visible row). This bug dates all the way back to
commit dafaa3ef, which added SSI.
To fix, make sure that we check the xmin of concurrently inserted tuples
that happen to also have been updated concurrently.
Author: Peter Geoghegan
Reported-By: Kyle Kingsbury
Reviewed-By: Thomas Munro
Discussion: https://postgr.es/m/[email protected]
Backpatch: All supported versions
M src/backend/storage/lmgr/predicate.c
A src/test/isolation/expected/update-conflict-out.out
M src/test/isolation/isolation_schedule
A src/test/isolation/specs/update-conflict-out.spec
Fix typos.
commit : 277f154e4f1ccc45b39715d777d8ff6e56fc6c55
author : Amit Kapila <[email protected]>
date : Thu, 11 Jun 2020 14:10:43 +0530
committer: Amit Kapila <[email protected]>
date : Thu, 11 Jun 2020 14:10:43 +0530
Reported-by: John Naylor
Author: John Naylor
Backpatch-through: 9.5
Discussion: https://postgr.es/m/CACPNZCtRuvs6G+EYqejhVJgBq2AKeZdXRVJsbX4syhO9gn5SNQ@mail.gmail.com
M src/test/regress/input/largeobject.source
M src/test/regress/output/largeobject.source
M src/test/regress/output/largeobject_1.source
Update description of parameter password_encryption
commit : 92cc60ec08c6e9c3f2b2580a0a874bd96440b89d
author : Peter Eisentraut <[email protected]>
date : Wed, 10 Jun 2020 11:57:41 +0200
committer: Peter Eisentraut <[email protected]>
date : Wed, 10 Jun 2020 11:57:41 +0200
The previous description string still described the pre-PostgreSQL
10 (pre eb61136dc75a76caef8460fa939244d8593100f2) behavior of
selecting between encrypted and unencrypted, but it is now choosing
between encryption algorithms.
M src/backend/utils/misc/guc.c
Avoid need for valgrind suppressions for pg_atomic_init_u64 on some platforms.
commit : fd6daa006e7ba42c0f97fe852d83293e5e34d15c
author : Andres Freund <[email protected]>
date : Mon, 8 Jun 2020 19:52:19 -0700
committer: Andres Freund <[email protected]>
date : Mon, 8 Jun 2020 19:52:19 -0700
Previously we used pg_atomic_write_64_impl inside
pg_atomic_init_u64. That works correctly, but on platforms without
64bit single copy atomicity it could trigger spurious valgrind errors
about uninitialized memory, because we use compare_and_swap for atomic
writes on such platforms.
I previously suppressed one instance of this problem (6c878edc1df),
but as Tom reports that wasn't enough. As the atomic variable cannot
yet be concurrently accessible during initialization, it seems better
to have pg_atomic_init_64_impl set the value directly.
Change pg_atomic_init_u32_impl for symmetry.
Reported-By: Tom Lane
Author: Andres Freund
Discussion: https://postgr.es/m/[email protected]
Backpatch: 9.5-
M src/include/port/atomics/generic.h
M src/tools/valgrind.supp
Fix locking bugs that could corrupt pg_control.
commit : 48eb6a3c895dac239f7e04fc3d62c09a17c1fc4a
author : Thomas Munro <[email protected]>
date : Mon, 8 Jun 2020 13:57:24 +1200
committer: Thomas Munro <[email protected]>
date : Mon, 8 Jun 2020 13:57:24 +1200
The redo routines for XLOG_CHECKPOINT_{ONLINE,SHUTDOWN} must acquire
ControlFileLock before modifying ControlFile->checkPointCopy, or the
checkpointer could write out a control file with a bad checksum.
Likewise, XLogReportParameters() must acquire ControlFileLock before
modifying ControlFile and calling UpdateControlFile().
Back-patch to all supported releases.
Author: Nathan Bossart <[email protected]>
Author: Fujii Masao <[email protected]>
Reviewed-by: Fujii Masao <[email protected]>
Reviewed-by: Michael Paquier <[email protected]>
Reviewed-by: Thomas Munro <[email protected]>
Discussion: https://postgr.es/m/70BF24D6-DC51-443F-B55A-95735803842A%40amazon.com
M src/backend/access/transam/xlog.c
Doc: Update example symptom of systemd misconfiguration.
commit : a35896c4b2a18b84f35c2cc6a9f5aee6ba041c43
author : Thomas Munro <[email protected]>
date : Mon, 8 Jun 2020 13:20:46 +1200
committer: Thomas Munro <[email protected]>
date : Mon, 8 Jun 2020 13:20:46 +1200
In PostgreSQL 10, we stopped using System V semaphores on Linux
systems. Update the example we give of an error message from a
misconfigured system to show what people are most likely to see these
days.
Back-patch to 10, where PREFERRED_SEMAPHORES=UNNAMED_POSIX arrived.
Reviewed-by: Tom Lane <[email protected]>
Discussion: https://postgr.es/m/CA%2BhUKGLmJUSwybaPQv39rB8ABpqJq84im2UjZvyUY4feYhpWMw%40mail.gmail.com
M doc/src/sgml/runtime.sgml
MSVC: Avoid warning when testing a TAP suite without PROVE_FLAGS.
commit : f7faf4a5d779cc0883793fab3c1e17ea81e1603b
author : Noah Misch <[email protected]>
date : Sun, 7 Jun 2020 16:27:13 -0700
committer: Noah Misch <[email protected]>
date : Sun, 7 Jun 2020 16:27:13 -0700
Commit 7be5d8df1f74b78620167d3abf32ee607e728919 surfaced the logic
error, which had no functional implications, by adding "use warnings".
The buildfarm always customizes PROVE_FLAGS, so the warning did not
appear there. Back-patch to 9.5 (all supported versions).
M src/tools/msvc/vcregress.pl
Refresh function name in CRC-associated Valgrind suppressions.
commit : 6c669003cfdd6814f21b15eabe9bd3d6082bbf79
author : Noah Misch <[email protected]>
date : Fri, 5 Jun 2020 20:10:53 -0700
committer: Noah Misch <[email protected]>
date : Fri, 5 Jun 2020 20:10:53 -0700
Back-patch to 9.5, where commit 4f700bcd20c087f60346cb8aefd0e269be8e2157
first appeared.
Reviewed by Tom Lane. Reported by Andrew Dunstan.
Discussion: https://postgr.es/m/[email protected]
M src/tools/valgrind.supp
Add unlikely() to CHECK_FOR_INTERRUPTS()
commit : 3cbf4be3e0eb36ce9e433c5bb1f0517f69a3fecc
author : Joe Conway <[email protected]>
date : Fri, 5 Jun 2020 16:49:32 -0400
committer: Joe Conway <[email protected]>
date : Fri, 5 Jun 2020 16:49:32 -0400
Add the unlikely() branch hint macro to CHECK_FOR_INTERRUPTS().
Backpatch to REL_10_STABLE where we first started using unlikely().
Discussion: https://www.postgresql.org/message-id/flat/8692553c-7fe8-17d9-cbc1-7cddb758f4c6%40joeconway.com
M src/include/miscadmin.h
Reject "23:59:60.nnn" in datetime input.
commit : 6490376e56b09befe3d4e6792beb1d2328b61b44
author : Tom Lane <[email protected]>
date : Thu, 4 Jun 2020 16:42:08 -0400
committer: Tom Lane <[email protected]>
date : Thu, 4 Jun 2020 16:42:08 -0400
It's intentional that we don't allow values greater than 24 hours,
while we do allow "24:00:00" as well as "23:59:60" as inputs.
However, the range check was miscoded in such a way that it would
accept "23:59:60.nnn" with a nonzero fraction. For time or timetz,
the stored result would then be greater than "24:00:00" which would
fail dump/reload, not to mention possibly confusing other operations.
Fix by explicitly calculating the result and making sure it does not
exceed 24 hours. (This calculation is redundant with what will happen
later in tm2time or tm2timetz. Maybe someday somebody will find that
annoying enough to justify refactoring to avoid the duplication; but
that seems too invasive for a back-patched bug fix, and the cost is
probably unmeasurable anyway.)
Note that this change also rejects such input as the time portion
of a timestamp(tz) value.
Back-patch to v10. The bug is far older, but to change this pre-v10
we'd need to ensure that the logic behaves sanely with float timestamps,
which is possibly nontrivial due to roundoff considerations.
Doesn't really seem worth troubling with.
Per report from Christoph Berg.
Discussion: https://postgr.es/m/[email protected]
M src/backend/utils/adt/date.c
M src/backend/utils/adt/datetime.c
M src/backend/utils/adt/timestamp.c
M src/include/utils/date.h
M src/test/regress/expected/time.out
M src/test/regress/expected/timetz.out
M src/test/regress/sql/time.sql
M src/test/regress/sql/timetz.sql
Fix instance of elog() called while holding a spinlock
commit : b41a85f5331751bf4f85abc5e75229620a0aa988
author : Michael Paquier <[email protected]>
date : Thu, 4 Jun 2020 10:18:06 +0900
committer: Michael Paquier <[email protected]>
date : Thu, 4 Jun 2020 10:18:06 +0900
This broke the project rule to not call any complex code while a
spinlock is held. Issue introduced by b89e151.
Discussion: https://postgr.es/m/[email protected]
Backpatch-through: 9.5
M src/backend/replication/logical/logical.c
Don't call palloc() while holding a spinlock, either.
commit : 7a8cb4a61e7e17620b7c34bead033c02cea08b6c
author : Tom Lane <[email protected]>
date : Wed, 3 Jun 2020 12:36:00 -0400
committer: Tom Lane <[email protected]>
date : Wed, 3 Jun 2020 12:36:00 -0400
Fix some more violations of the "only straight-line code inside a
spinlock" rule. These are hazardous not only because they risk
holding the lock for an excessively long time, but because it's
possible for palloc to throw elog(ERROR), leaving a stuck spinlock
behind.
copy_replication_slot() had two separate places that did pallocs
while holding a spinlock. We can make the code simpler and safer
by copying the whole ReplicationSlot struct into a local variable
while holding the spinlock, and then referencing that copy.
(While that's arguably more cycles than we really need to spend
holding the lock, the struct isn't all that big, and this way seems
far more maintainable than copying fields piecemeal. Anyway this
is surely much cheaper than a palloc.) That bug goes back to v12.
InvalidateObsoleteReplicationSlots() not only did a palloc while
holding a spinlock, but for extra sloppiness then leaked the memory
--- probably for the lifetime of the checkpointer process, though
I didn't try to verify that. Fortunately that silliness is new
in HEAD.
pg_get_replication_slots() had a cosmetic violation of the rule,
in that it only assumed it's safe to call namecpy() while holding
a spinlock. Still, that's a hazard waiting to bite somebody, and
there were some other cosmetic coding-rule violations in the same
function, so clean it up. I back-patched this as far as v10; the
code exists before that but it looks different, and this didn't
seem important enough to adapt the patch further back.
Discussion: https://postgr.es/m/[email protected]
M src/backend/replication/slotfuncs.c
M src/include/replication/slot.h
Fix use-after-release mistake in currtid() and currtid2() for views
commit : 8bc74490df252215ce5b618442900e7a107be2a1
author : Michael Paquier <[email protected]>
date : Mon, 1 Jun 2020 14:41:32 +0900
committer: Michael Paquier <[email protected]>
date : Mon, 1 Jun 2020 14:41:32 +0900
This issue has been present since the introduction of this code as of
a3519a2 from 2002, and has been found by buildfarm member prion that
uses RELCACHE_FORCE_RELEASE via the tests introduced recently in
e786be5.
Discussion: https://postgr.es/m/[email protected]
Backpatch-through: 9.5
M src/backend/utils/adt/tid.c
Make install-tests target work with vpath builds
commit : f4f4d64eafcd07880fee570e367422af757d3f02
author : Andrew Dunstan <[email protected]>
date : Sun, 31 May 2020 18:33:00 -0400
committer: Andrew Dunstan <[email protected]>
date : Sun, 31 May 2020 18:33:00 -0400
Also add a top-level install-tests target.
Backpatch to all live branches.
Craig Ringer, tweaked by me.
M GNUmakefile.in
M src/test/regress/GNUmakefile
llvmjit: Fix building against LLVM 11 by removing unnecessary include.
commit : c001c115bcb2accddc23a25c605886e01475db4f
author : Andres Freund <[email protected]>
date : Thu, 28 May 2020 15:08:12 -0700
committer: Andres Freund <[email protected]>
date : Thu, 28 May 2020 15:08:12 -0700
LLVM has removed this header, in the branch that will become llvm
11. But as it turns out we didn't actually need it, so just remove it.
Author: Jesse Zhang <[email protected]>
Discussion: https://postgr.es/m/CAGf+fX7bvtP0YXMu7pOsu_NwhxW6dArTkxb=jt7M2-UJkyJ_3g@mail.gmail.com
Backpatch: 11, where JIT support using llvm was introduced.
M src/backend/jit/llvm/llvmjit_inline.cpp
Initialize dblink remoteConn struct in all cases
commit : 49a00e07c534d0d4378d40b6240e061640051304
author : Joe Conway <[email protected]>
date : Thu, 28 May 2020 13:45:02 -0400
committer: Joe Conway <[email protected]>
date : Thu, 28 May 2020 13:45:02 -0400
Two of the members of rconn were left uninitialized. When
dblink_open() is called without an outer transaction it
handles the initialization for us, but with an outer
transaction it does not. Arrange for initialization
in all cases. Backpatch to all supported versions.
Reported-by: Alexander Lakhin
Discussion: https://www.postgresql.org/message-id/flat/9bd0744f-5f04-c778-c5b3-809efe9c30c7%40joeconway.com#c545909a41664991aca60c4d70a10ce7
M contrib/dblink/dblink.c
Add CHECK_FOR_INTERRUPTS() to the repeat() function
commit : 36758c472ea71dae96f4b495df65490413c79c83
author : Joe Conway <[email protected]>
date : Thu, 28 May 2020 13:17:04 -0400
committer: Joe Conway <[email protected]>
date : Thu, 28 May 2020 13:17:04 -0400
The repeat() function loops for potentially a long time without
ever checking for interrupts. This prevents, for example, a query
cancel from interrupting until the work is all done. Fix by
inserting a CHECK_FOR_INTERRUPTS() into the loop.
Backpatch to all supported versions.
Discussion: https://www.postgresql.org/message-id/flat/8692553c-7fe8-17d9-cbc1-7cddb758f4c6%40joeconway.com
M src/backend/utils/adt/oracle_compat.c
Add missing error code to "cannot attach index ..." error.
commit : 34301c9c5674919ef2e786f1157b3ced543b02e2
author : Heikki Linnakangas <[email protected]>
date : Thu, 28 May 2020 12:37:00 +0300
committer: Heikki Linnakangas <[email protected]>
date : Thu, 28 May 2020 12:37:00 +0300
ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE was used in an ereport with the
same message but different errdetail a few lines earlier, so use that
here as well.
Backpatch-through: 11
M src/backend/commands/tablecmds.c
Fix typo in test comment.
commit : 25fc24ba90df99d3c331627f3e4efb795a440dd0
author : Heikki Linnakangas <[email protected]>
date : Thu, 28 May 2020 12:35:18 +0300
committer: Heikki Linnakangas <[email protected]>
date : Thu, 28 May 2020 12:35:18 +0300
The same comment was copied to a few different places, with the same typo.
Backpatch down to v11, where this typo was introduced.
M src/test/regress/expected/alter_table.out
M src/test/regress/expected/hash_part.out
M src/test/regress/expected/insert.out
M src/test/regress/expected/partition_prune.out
M src/test/regress/sql/alter_table.sql
M src/test/regress/sql/hash_part.sql
M src/test/regress/sql/insert.sql
M src/test/regress/sql/partition_prune.sql
Add a temp-install prerequisite to top-level "check-tests".
commit : 9d47294ab7c45a64cd844fb7298bef91c16fafbe
author : Noah Misch <[email protected]>
date : Mon, 25 May 2020 16:21:04 -0700
committer: Noah Misch <[email protected]>
date : Mon, 25 May 2020 16:21:04 -0700
The target failed, tested $PATH binaries, or tested a stale temporary
installation. Commit c66b438db62748000700c9b90b585e756dd54141 missed
this. Back-patch to 9.5 (all supported versions).
M GNUmakefile.in
doc: suggest 1.1 as a random_page_cost value for SSDs
commit : b75f73dc0cf792171cacdc536327807dbd496205
author : Bruce Momjian <[email protected]>
date : Thu, 21 May 2020 20:28:38 -0400
committer: Bruce Momjian <[email protected]>
date : Thu, 21 May 2020 20:28:38 -0400
Reported-by: yigong hu
Discussion: https://postgr.es/m/CAOxFffcourucFqSk+tZA13ErS3XRYkDy6EeaPff4AvHGiEEuug@mail.gmail.com
Backpatch-through: 9.5
M doc/src/sgml/config.sgml
doc: Simplify mention of unique indexes for NULL control
commit : 00c51b365c90e3177a05026afda20f8aae7f997a
author : Bruce Momjian <[email protected]>
date : Thu, 21 May 2020 19:49:30 -0400
committer: Bruce Momjian <[email protected]>
date : Thu, 21 May 2020 19:49:30 -0400
Discussion: https://postgr.es/m/[email protected]
Backpatch-through: 9.5
M doc/src/sgml/indices.sgml
Fix MSVC installations with multiple "configure" files detected
commit : bb24af50d515651b950e153fdd25ddb46184a57b
author : Michael Paquier <[email protected]>
date : Thu, 21 May 2020 14:41:33 +0900
committer: Michael Paquier <[email protected]>
date : Thu, 21 May 2020 14:41:33 +0900
When installing binaries and libraries using the MSVC installation
routines, the operation gets done after moving to the root folder, whose
location is detected by checking if "configure" exists two times in a
row. So, calling the installation script from src/tools/msvc/ with an
extra "configure" file four levels up the root path of the code tree
causes the execution to go further up, leading to a failure in finding
the builds. This commit fixes the issue by moving to the root folder of
the code tree only once, when necessary.
Author: Arnold Müller
Reviewed-by: Daniel Gustafsson
Discussion: https://postgr.es/m/[email protected]
Backpatch-through: 9.5
M src/tools/msvc/Install.pm
Doc: Fix description of pg_class.relreplident
commit : 673582d21f30871d9b5d04449e6b2b7acde69209
author : Michael Paquier <[email protected]>
date : Wed, 20 May 2020 14:21:50 +0900
committer: Michael Paquier <[email protected]>
date : Wed, 20 May 2020 14:21:50 +0900
The description missed a comma and lacked an explanation of what happens
with REPLICA IDENTITY USING INDEX when the dependent index is dropped.
Author: Marina Polyakova
Reviewed-by: Daniel Gustafsson, Michael Paquier
Discussion: https://postgr.es/m/[email protected]
Backpatch-through: 9.5
M doc/src/sgml/catalogs.sgml
Fix comment in slot.c.
commit : 1567ed9b3adc66f00922a9dce06b108c2710d046
author : Amit Kapila <[email protected]>
date : Mon, 18 May 2020 08:16:45 +0530
committer: Amit Kapila <[email protected]>
date : Mon, 18 May 2020 08:16:45 +0530
Reported-by: Sawada Masahiko
Author: Sawada Masahiko
Reviewed-by: Amit Kapila
Backpatch-through: 9.5
Discussion: https://postgr.es/m/CA+fd4k4Ws7M7YQ8PqSym5WB1y75dZeBTd1sZJUQdfe0KJQ-iSA@mail.gmail.com
M src/backend/replication/slot.c
Fix assertion with relation using REPLICA IDENTITY FULL in subscriber
commit : 70ae82b9b4b5871604ba4e98ebe0f32bef223200
author : Michael Paquier <[email protected]>
date : Sat, 16 May 2020 18:16:37 +0900
committer: Michael Paquier <[email protected]>
date : Sat, 16 May 2020 18:16:37 +0900
In a logical replication subscriber, a table using REPLICA IDENTITY FULL
which has a primary key would try to use the primary key's index
available to scan for a tuple, but an assertion only assumed as correct
the case of an index associated to REPLICA IDENTITY USING INDEX. This
commit corrects the assertion so as the use of a primary key index is a
valid case.
Reported-by: Dilip Kumar
Analyzed-by: Dilip Kumar
Author: Euler Taveira
Reviewed-by: Michael Paquier, Masahiko Sawada
Discussion: https://postgr.es/m/CAFiTN-u64S5bUiPL1q5kwpHNd0hRnf1OE-bzxNiOs5zo84i51w@mail.gmail.com
Backpatch-through: 10
M src/backend/executor/execReplication.c
M src/test/subscription/t/001_rep_changes.pl
Fix bogus initialization of replication origin shared memory state.
commit : ee39a4b9e475348dd3de82781a54be82e63a3186
author : Tom Lane <[email protected]>
date : Fri, 15 May 2020 19:05:39 -0400
committer: Tom Lane <[email protected]>
date : Fri, 15 May 2020 19:05:39 -0400
The previous coding zeroed out offsetof(ReplicationStateCtl, states)
more bytes than it was entitled to, as a consequence of starting the
zeroing from the wrong pointer (or, if you prefer, using the wrong
calculation of how much to zero).
It's unsurprising that this has not caused any reported problems,
since it can be expected that the newly-allocated block is at the end
of what we've used in shared memory, and we always make the shmem
block substantially bigger than minimally necessary. Nonetheless,
this is wrong and it could bite us someday; plus it's a dangerous
model for somebody to copy.
This dates back to the introduction of this code (commit 5aa235042),
so back-patch to all supported branches.
M src/backend/replication/logical/origin.c
Avoid killing btree items that are already dead
commit : 37b5c5fde46ad3081f02668846f4d125ca4f7992
author : Alvaro Herrera <[email protected]>
date : Fri, 15 May 2020 16:50:34 -0400
committer: Alvaro Herrera <[email protected]>
date : Fri, 15 May 2020 16:50:34 -0400
_bt_killitems marks btree items dead when a scan leaves the page where
they live, but it does so with only share lock (to improve concurrency).
This was historicall okay, since killing a dead item has no
consequences. However, with the advent of data checksums and
wal_log_hints, this action incurs a WAL full-page-image record of the
page. Multiple concurrent processes would write the same page several
times, leading to WAL bloat. The probability of this happening can be
reduced by only killing items if they're not already dead, so change the
code to do that.
The problem could eliminated completely by having _bt_killitems upgrade
to exclusive lock upon seeing a killable item, but that would reduce
concurrency so it's considered a cure worse than the disease.
Backpatch all the way back to 9.5, since wal_log_hints was introduced in
9.4.
Author: Masahiko Sawada <[email protected]>
Discussion: https://postgr.es/m/CA+fd4k6PeRj2CkzapWNrERkja5G0-6D-YQiKfbukJV+qZGFZ_Q@mail.gmail.com
M src/backend/access/nbtree/nbtutils.c
docs: add xreflabel entries for autovacuum, SP-GiST, and TOAST
commit : bc4a8b460079af2bc244087479684862d6794770
author : Bruce Momjian <[email protected]>
date : Fri, 15 May 2020 12:38:40 -0400
committer: Bruce Momjian <[email protected]>
date : Fri, 15 May 2020 12:38:40 -0400
This is for use by the PG 13 release notes, but might be used for minor
release notes in the future.
Backpatch-through: 9.5
M doc/src/sgml/maintenance.sgml
M doc/src/sgml/spgist.sgml
M doc/src/sgml/storage.sgml
doc: add missing xreflabels to the main docs (not refs)
commit : 621455b78318d5fb2d2f4062d20c1af1f50bd1d7
author : Bruce Momjian <[email protected]>
date : Fri, 15 May 2020 12:05:43 -0400
committer: Bruce Momjian <[email protected]>
date : Fri, 15 May 2020 12:05:43 -0400
Add missing xreflabels for index types, geqo, libpq, spi, server-side
languages, ecpg, and vaacuumlo.
Backpatch-through: 9.5
M doc/src/sgml/ecpg.sgml
M doc/src/sgml/geqo.sgml
M doc/src/sgml/gin.sgml
M doc/src/sgml/gist.sgml
M doc/src/sgml/libpq.sgml
M doc/src/sgml/plperl.sgml
M doc/src/sgml/plpgsql.sgml
M doc/src/sgml/plpython.sgml
M doc/src/sgml/spi.sgml
M doc/src/sgml/vacuumlo.sgml
doc: remove extra blank line at the top of SGML files
commit : a4def04df5fa1c01e38f6dd8941a07c60da01068
author : Bruce Momjian <[email protected]>
date : Fri, 15 May 2020 09:55:43 -0400
committer: Bruce Momjian <[email protected]>
date : Fri, 15 May 2020 09:55:43 -0400
Backpatch-through: 9.5
M doc/src/sgml/ref/copy.sgml
doc: make ref/*.sgml file header comment layout consistent
commit : d9cbdec23fd63a8ac650ab174d5d33ab5fcc3bb4
author : Bruce Momjian <[email protected]>
date : Fri, 15 May 2020 08:52:24 -0400
committer: Bruce Momjian <[email protected]>
date : Fri, 15 May 2020 08:52:24 -0400
M doc/src/sgml/ref/checkpoint.sgml
M doc/src/sgml/ref/create_cast.sgml
M doc/src/sgml/ref/create_collation.sgml
M doc/src/sgml/ref/create_conversion.sgml
M doc/src/sgml/ref/create_foreign_table.sgml
M doc/src/sgml/ref/create_function.sgml
M doc/src/sgml/ref/create_procedure.sgml
M doc/src/sgml/ref/create_transform.sgml
M doc/src/sgml/ref/drop_cast.sgml
M doc/src/sgml/ref/drop_collation.sgml
M doc/src/sgml/ref/drop_conversion.sgml
M doc/src/sgml/ref/drop_foreign_table.sgml
M doc/src/sgml/ref/drop_transform.sgml
M doc/src/sgml/ref/load.sgml
M doc/src/sgml/ref/pg_config-ref.sgml
M doc/src/sgml/ref/pg_restore.sgml
M doc/src/sgml/ref/pgarchivecleanup.sgml
M doc/src/sgml/ref/pgbench.sgml
M doc/src/sgml/ref/pgtestfsync.sgml
M doc/src/sgml/ref/pgtesttiming.sgml
M doc/src/sgml/ref/pgupgrade.sgml
M doc/src/sgml/ref/set_constraints.sgml
M doc/src/sgml/ref/set_session_auth.sgml
M doc/src/sgml/ref/set_transaction.sgml
Fix amcheck for page checks concurrent to replay of btree page deletion
commit : b9a45d8dba4de6db14f03adf8f1a8ce51d43005b
author : Alexander Korotkov <[email protected]>
date : Wed, 6 May 2020 15:35:27 +0300
committer: Alexander Korotkov <[email protected]>
date : Wed, 6 May 2020 15:35:27 +0300
amcheck expects at least hikey to always exist on leaf page even if it is
deleted page. But replica reinitializes page during replay of page deletion,
causing deleted page to have no items. Thus, replay of page deletion can
cause an error in concurrent amcheck run.
This commit relaxes amcheck expectation making it tolerate deleted page with
no items.
Reported-by: Konstantin Knizhnik
Discussion: https://postgr.es/m/CAPpHfdt_OTyQpXaPJcWzV2N-LNeNJseNB-K_A66qG%3DL518VTFw%40mail.gmail.com
Author: Alexander Korotkov
Reviewed-by: Peter Geoghegan
Backpatch-through: 11
M contrib/amcheck/verify_nbtree.c
Fix the MSVC build for versions 2015 and later.
commit : 1fbfc3d8a59a570db1e13e8a54b0774e7255ced0
author : Amit Kapila <[email protected]>
date : Thu, 14 May 2020 09:39:04 +0530
committer: Amit Kapila <[email protected]>
date : Thu, 14 May 2020 09:39:04 +0530
Visual Studio 2015 and later versions should still be able to do the same
as Visual Studio 2012, but the declaration of locale_name is missing in
_locale_t, causing the code compilation to fail, hence this falls back
instead on to enumerating all system locales by using EnumSystemLocalesEx
to find the required locale name. If the input argument is in Unix-style
then we can get ISO Locale name directly by using GetLocaleInfoEx() with
LCType as LOCALE_SNAME.
In passing, change the documentation references of the now obsolete links.
Note that this problem occurs only with NLS enabled builds.
Author: Juan José Santamaría Flecha, Davinder Singh and Amit Kapila
Reviewed-by: Ranier Vilela and Amit Kapila
Backpatch-through: 9.5
Discussion: https://postgr.es/m/CAHzhFSFoJEWezR96um4-rg5W6m2Rj9Ud2CNZvV4NWc9tXV7aXQ@mail.gmail.com
M src/backend/utils/adt/pg_locale.c
Fix pg_recvlogical avoidance of superfluous Standby Status Update.
commit : a267894529b260002cdb85cde9680529ae4ceeb4
author : Noah Misch <[email protected]>
date : Wed, 13 May 2020 20:42:09 -0700
committer: Noah Misch <[email protected]>
date : Wed, 13 May 2020 20:42:09 -0700
The defect suppressed a Standby Status Update message when bytes flushed
to disk had changed but bytes received had not changed. If
pg_recvlogical then exited with no intervening Standby Status Update,
the next pg_recvlogical repeated already-flushed records. The defect
could also cause superfluous messages, which are functionally harmless.
Back-patch to 9.5 (all supported versions).
Discussion: https://postgr.es/m/[email protected]
M src/bin/pg_basebackup/pg_recvlogical.c
In successful pg_recvlogical, end PGRES_COPY_OUT cleanly.
commit : 357012e17f3f7d47bd276d4441c28fbcd58a2c8b
author : Noah Misch <[email protected]>
date : Wed, 13 May 2020 20:42:09 -0700
committer: Noah Misch <[email protected]>
date : Wed, 13 May 2020 20:42:09 -0700
pg_recvlogical merely called PQfinish(), so the backend sent messages
after the disconnect. When that caused EPIPE in internal_flush(),
before a LogicalConfirmReceivedLocation(), the next pg_recvlogical would
repeat already-acknowledged records. Whether or not the defect causes
EPIPE, post-disconnect messages could contain an ErrorResponse that the
user should see. One properly ends PGRES_COPY_OUT by repeating
PQgetCopyData() until it returns a negative value. Augment one of the
tests to cover the case of WAL past --endpos. Back-patch to v10, where
commit 7c030783a5bd07cadffc2a1018bc33119a4c7505 first appeared. Before
that commit, pg_recvlogical never reached PGRES_COPY_OUT.
Reported by Thomas Munro.
Discussion: https://postgr.es/m/CAEepm=1MzM2Z_xNe4foGwZ1a+MO_2S9oYDq3M5D11=JDU_+0Nw@mail.gmail.com
M src/bin/pg_basebackup/pg_recvlogical.c
M src/test/recovery/t/006_logical_decoding.pl