Stamp 11.8.
commit : d439e27d5f57df1365b53688daa367d56d55599d
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Mon, 11 May 2020 17:10:48 -0400
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Mon, 11 May 2020 17:10:48 -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
Translation updates
commit : fcd89bbb70e2963c5f832191d3fd1f2a1d6443b6
author : Peter Eisentraut <peter@eisentraut.org>
date : Mon, 11 May 2020 13:24:12 +0200
committer: Peter Eisentraut <peter@eisentraut.org>
date : Mon, 11 May 2020 13:24:12 +0200
Source-Git-URL: https://git.postgresql.org/git/pgtranslation/messages.git
Source-Git-Hash: b6156df7b9bb5e2f7280dfee626698cce9ef41de
M src/backend/po/de.po
M src/backend/po/es.po
M src/backend/po/fr.po
M src/backend/po/ru.po
M src/backend/po/sv.po
M src/bin/pg_basebackup/po/ru.po
M src/bin/pg_dump/po/de.po
M src/bin/pg_dump/po/fr.po
M src/bin/pg_dump/po/ru.po
M src/bin/pg_dump/po/sv.po
M src/bin/pg_rewind/po/ru.po
M src/bin/pg_upgrade/po/de.po
M src/bin/pg_upgrade/po/fr.po
M src/bin/pg_upgrade/po/ru.po
M src/bin/pg_upgrade/po/sv.po
M src/bin/pg_verify_checksums/po/ru.po
M src/bin/psql/po/ru.po
M src/bin/psql/po/sv.po
M src/bin/scripts/po/de.po
M src/bin/scripts/po/fr.po
M src/bin/scripts/po/ru.po
M src/bin/scripts/po/sv.po
M src/pl/plpgsql/src/po/ru.po
Release notes for 12.3, 11.8, 10.13, 9.6.18, 9.5.22.
commit : 0ff0ebf5b9b4b692231e276eca74ceee904f516d
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Sun, 10 May 2020 15:05:59 -0400
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Sun, 10 May 2020 15:05:59 -0400
M doc/src/sgml/release-11.sgml
Prevent archive recovery from scanning non-existent WAL files.
commit : dcd1569fb05df2e4180657149cfe2965222c32ca
author : Fujii Masao <fujii@postgresql.org>
date : Wed, 8 Apr 2020 00:49:29 +0900
committer: Fujii Masao <fujii@postgresql.org>
date : Wed, 8 Apr 2020 00:49:29 +0900
Previously when there were multiple timelines listed in the history file
of the recovery target timeline, archive recovery searched all of them,
starting from the newest timeline to the oldest one, to find the segment
to read. That is, archive recovery had to continuously fail scanning
the segment until it reached the timeline that the segment belonged to.
These scans for non-existent segment could be harmful on the recovery
performance especially when archival area was located on the remote
storage and each scan could take a long time.
To address the issue, this commit changes archive recovery so that
it skips scanning the timeline that the segment to read doesn't belong to.
Per discussion, back-patch to all supported versions.
Author: Kyotaro Horiguchi, tweaked a bit by Fujii Masao
Reviewed-by: David Steele, Pavel Suderevsky, Grigory Smolkin
Discussion: https://postgr.es/m/16159-f5a34a3a04dc67e0@postgresql.org
Discussion: https://postgr.es/m/20200129.120222.1476610231001551715.horikyota.ntt@gmail.com
M src/backend/access/transam/xlog.c
pg_restore: Provide file name with one failure message
commit : 7b540f8707b716181f2b0d3db68e92868d09d867
author : Alvaro Herrera <alvherre@alvh.no-ip.org>
date : Fri, 8 May 2020 19:38:46 -0400
committer: Alvaro Herrera <alvherre@alvh.no-ip.org>
date : Fri, 8 May 2020 19:38:46 -0400
Almost all error messages already include file name where relevant, but
this one had been overlooked. Repair.
Backpatch to 9.5.
Author: Euler Taveira <euler.taveira@2ndquadrant.com>
Discussion: https://postgr.es/m/CAH503wA_VOrcKL_43p9atRejCDYmOZ8MzfK9S6TJrQqBqNeAXA@mail.gmail.com
Reviewed-by: Álvaro Herrera <alvherre@alvh.no-ip.org>
M src/bin/pg_dump/pg_backup_directory.c
Propagate ALTER TABLE ... SET STORAGE to indexes
commit : 03a8a5f2d4a1f9886ad1d62d3f70424dfcdf8048
author : Peter Eisentraut <peter@eisentraut.org>
date : Thu, 9 Apr 2020 14:10:01 +0200
committer: Peter Eisentraut <peter@eisentraut.org>
date : Thu, 9 Apr 2020 14:10:01 +0200
When creating a new index, the attstorage setting of the table column
is copied to regular (non-expression) index columns. But a later
ALTER TABLE ... SET STORAGE is not propagated to indexes, thus
creating an inconsistent and undumpable state.
Discussion: https://www.postgresql.org/message-id/flat/9765d72b-37c0-06f5-e349-2a580aafd989%402ndquadrant.com
M contrib/test_decoding/expected/toast.out
M contrib/test_decoding/sql/toast.sql
M src/backend/commands/tablecmds.c
M src/test/regress/expected/alter_table.out
M src/test/regress/sql/alter_table.sql
Fix inconsistency in pg_buffercache docs.
commit : f918b5d219b7200d204515b32346183b97d031ae
author : Amit Kapila <akapila@postgresql.org>
date : Fri, 8 May 2020 08:56:03 +0530
committer: Amit Kapila <akapila@postgresql.org>
date : Fri, 8 May 2020 08:56:03 +0530
Commit 6e654546fb avoids locking bufmgr partitions to make pg_buffercache
less disruptive on production systems but forgot to update the docs.
Reported-by: Sawada Masahiko
Author: Sawada Masahiko
Reviewed-by: Amit Kapila
Backpatch-through: 10
Discussion: https://postgr.es/m/CA+fd4k6sD8oeP1qJbFAor=rCpYckU9DsywHiYx3x5Hz5Z8Ua_w@mail.gmail.com
M doc/src/sgml/pgbuffercache.sgml
Report missing wait event for timeline history file.
commit : cc534fc3b289b4ec199705733120a55252442f5a
author : Fujii Masao <fujii@postgresql.org>
date : Fri, 8 May 2020 10:36:40 +0900
committer: Fujii Masao <fujii@postgresql.org>
date : Fri, 8 May 2020 10:36:40 +0900
TimelineHistoryRead and TimelineHistoryWrite wait events are reported
during waiting for a read and write of a timeline history file, respectively.
However, previously, TimelineHistoryRead wait event was not reported
while readTimeLineHistory() was reading a timeline history file. Also
TimelineHistoryWrite was not reported while writeTimeLineHistory() was
writing one line with the details of the timeline split, at the end.
This commit fixes these issues.
Back-patch to v10 where wait events for a timeline history file was added.
Author: Masahiro Ikeda
Reviewed-by: Michael Paquier, Fujii Masao
Discussion: https://postgr.es/m/d11b0c910b63684424e06772eb844ab5@oss.nttdata.com
M src/backend/access/transam/timeline.c
Fix YA text phrase search bug.
commit : 5db48808c4d5c3641b76d442ba7e7d8916adadf4
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Thu, 7 May 2020 15:59:52 -0400
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Thu, 7 May 2020 15:59:52 -0400
checkcondition_str() failed to report multiple matches for a prefix
pattern correctly: it would dutifully merge the match positions, but
then after exiting that loop, if the last prefix-matching word had
had no suitable positions, it would report there were no matches.
The upshot would be failing to recognize a match that the query
should match.
It looks like you need all of these conditions to see the bug:
* a phrase search (else we don't ask for match position details)
* a prefix search item (else we don't get to this code)
* a weight restriction (else checkclass_str won't fail)
Noted while investigating a problem report from Pavel Borisov,
though this is distinct from the issue he was on about.
Back-patch to 9.6 where phrase search was added.
M src/backend/utils/adt/tsvector_op.c
M src/test/regress/expected/tstypes.out
M src/test/regress/sql/tstypes.sql
Heed lock protocol in DROP OWNED BY
commit : 59273a7cec34e5bb8a9483f23a03e3318b52d65b
author : Alvaro Herrera <alvherre@alvh.no-ip.org>
date : Wed, 6 May 2020 12:29:41 -0400
committer: Alvaro Herrera <alvherre@alvh.no-ip.org>
date : Wed, 6 May 2020 12:29:41 -0400
We were acquiring object locks then deleting objects one by one, instead
of acquiring all object locks first, ignoring those that did not exist,
and then deleting all objects together. The latter is the correct
protocol to use, and what this commits changes to code to do. Failing
to follow that leads to "cache lookup failed for relation XYZ" error
reports when DROP OWNED runs concurrently with other DDL -- for example,
a session termination that removes some temp tables.
Author: Álvaro Herrera
Reported-by: Mithun Chicklore Yogendra (Mithun CY)
Reviewed-by: Ahsan Hadi, Tom Lane
Discussion: https://postgr.es/m/CADq3xVZTbzK4ZLKq+dn_vB4QafXXbmMgDP3trY-GuLnib2Ai1w@mail.gmail.com
M src/backend/catalog/dependency.c
M src/backend/catalog/pg_shdepend.c
M src/backend/commands/subscriptioncmds.c
M src/include/catalog/dependency.h
Handle spaces for Python install location in MSVC scripts
commit : 984aca448d5dba0f1be162ce41aa23becf5e931a
author : Michael Paquier <michael@paquier.xyz>
date : Wed, 6 May 2020 21:08:26 +0900
committer: Michael Paquier <michael@paquier.xyz>
date : Wed, 6 May 2020 21:08:26 +0900
Attempting to use an installation path of Python that includes spaces
caused the MSVC builds to fail. This fixes the issue by using the same
quoting method as ad7595b for OpenSSL.
Author: Victor Wagner
Discussion: https://postgr.es/m/20200430150608.6dc6b8c4@antares.wagner.home
Backpatch-through: 9.5
M src/tools/msvc/Mkvcbuild.pm
Get rid of trailing semicolons in C macro definitions.
commit : a2098b60216c7a66054ee7b31e9f728bca43d004
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Fri, 1 May 2020 17:28:01 -0400
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Fri, 1 May 2020 17:28:01 -0400
Writing a trailing semicolon in a macro is almost never the right thing,
because you almost always want to write a semicolon after each macro
call instead. (Even if there was some reason to prefer not to, pgindent
would probably make a hash of code formatted that way; so within PG the
rule should basically be "don't do it".) Thus, if we have a semi inside
the macro, the compiler sees "something;;". Much of the time the extra
empty statement is harmless, but it could lead to mysterious syntax
errors at call sites. In perhaps an overabundance of neatnik-ism, let's
run around and get rid of the excess semicolons whereever possible.
The only thing worse than a mysterious syntax error is a mysterious
syntax error that only happens in the back branches; therefore,
backpatch these changes where relevant, which is most of them because
most of these mistakes are old. (The lack of reported problems shows
that this is largely a hypothetical issue, but still, it could bite
us in some future patch.)
John Naylor and Tom Lane
Discussion: https://postgr.es/m/CACPNZCs0qWTqJ2QUSGJ07B7uvAvzMb-KbG2q+oo+J3tsWN5cqw@mail.gmail.com
M contrib/btree_gist/btree_ts.c
M contrib/btree_gist/btree_utils_num.h
M contrib/pg_trgm/trgm.h
M contrib/pgcrypto/crypt-blowfish.c
M src/backend/nodes/readfuncs.c
M src/backend/optimizer/util/pathnode.c
M src/backend/utils/adt/formatting.c
M src/backend/utils/sort/gen_qsort_tuple.pl
M src/bin/pg_dump/pg_backup_archiver.h
M src/include/access/hash.h
M src/include/access/nbtree.h
M src/port/qsort.c
M src/port/qsort_arg.c
Clear up issue with FSM and oldest bpto.xact.
commit : 573478564705a801f7313bb793f05932cb875528
author : Peter Geoghegan <pg@bowt.ie>
date : Fri, 1 May 2020 12:19:39 -0700
committer: Peter Geoghegan <pg@bowt.ie>
date : Fri, 1 May 2020 12:19:39 -0700
On further reflection, code comments added by commit b0229f26 slightly
misrepresented how we determine the oldest bpto.xact for the index.
btvacuumpage() does not treat the bpto.xact of a page that it put in the
FSM as a candidate to be the oldest deleted page (the delete-marked page
that has the oldest bpto.xact XID among all pages encountered).
The definition of a deleted page for the purposes of the bpto.xact
calculation is different from the definition used by the bulk delete
statistics. The bulk delete statistics don't distinguish between pages
that were deleted by the current VACUUM, pages deleted by a previous
VACUUM operation but not yet recyclable/reusable, and pages that are
reusable (though reusable pages are counted separately).
Backpatch: 11-, just like commit b0229f26.
M src/backend/access/nbtree/nbtree.c
Fix undercounting in VACUUM VERBOSE output.
commit : d3944c364f32e0087088328145c6421cf24e7905
author : Peter Geoghegan <pg@bowt.ie>
date : Fri, 1 May 2020 09:51:06 -0700
committer: Peter Geoghegan <pg@bowt.ie>
date : Fri, 1 May 2020 09:51:06 -0700
The logic for determining how many nbtree pages in an index are deleted
pages sometimes undercounted pages. Pages that were deleted by the
current VACUUM operation (as opposed to some previous VACUUM operation
whose deleted pages have yet to be reused) were sometimes overlooked.
The final count is exposed to users through VACUUM VERBOSE's "%u index
pages have been deleted" output.
btvacuumpage() avoided double-counting when _bt_pagedel() deleted more
than one page by assuming that only one page was deleted, and that the
additional deleted pages would get picked up during a future call to
btvacuumpage() by the same VACUUM operation. _bt_pagedel() can
legitimately delete pages that the btvacuumscan() scan will not visit
again, though, so that assumption was slightly faulty.
Fix the accounting by teaching _bt_pagedel() about its caller's
requirements. It now only reports on pages that it knows btvacuumscan()
won't visit again (including the current btvacuumpage() page), so
everything works out in the end.
This bug has been around forever. Only backpatch to v11, though, to
keep _bt_pagedel() is sync on the branches that have today's bugfix
commit b0229f26da. Note that this commit changes the signature of
_bt_pagedel(), just like commit b0229f26da.
Author: Peter Geoghegan
Reviewed-By: Masahiko Sawada
Discussion: https://postgr.es/m/CAH2-WzkrXBcMQWAYUJMFTTvzx_r4q=pYSjDe07JnUXhe+OZnJA@mail.gmail.com
Backpatch: 11-
M src/backend/access/nbtree/nbtpage.c
M src/backend/access/nbtree/nbtree.c
M src/include/access/nbtree.h
Fix bug in nbtree VACUUM "skip full scan" feature.
commit : e4fa6c929554cf6b4087e746e7b40c2007217584
author : Peter Geoghegan <pg@bowt.ie>
date : Fri, 1 May 2020 08:39:49 -0700
committer: Peter Geoghegan <pg@bowt.ie>
date : Fri, 1 May 2020 08:39:49 -0700
Commit 857f9c36cda (which taught nbtree VACUUM to skip a scan of the
index from btcleanup in situations where it doesn't seem worth it) made
VACUUM maintain the oldest btpo.xact among all deleted pages for the
index as a whole. It failed to handle all the details surrounding pages
that are deleted by the current VACUUM operation correctly (though pages
deleted by some previous VACUUM operation were processed correctly).
The most immediate problem was that the special area of the page was
examined without a buffer pin at one point. More fundamentally, the
handling failed to account for the full range of _bt_pagedel()
behaviors. For example, _bt_pagedel() sometimes deletes internal pages
in passing, as part of deleting an entire subtree with btvacuumpage()
caller's page as the leaf level page. The original leaf page passed to
_bt_pagedel() might not be the page that it deletes first in cases where
deletion can take place.
It's unclear how disruptive this bug may have been, or what symptoms
users might want to look out for. The issue was spotted during
unrelated code review.
To fix, push down the logic for maintaining the oldest btpo.xact to
_bt_pagedel(). btvacuumpage() is now responsible for pages that were
fully deleted by a previous VACUUM operation, while _bt_pagedel() is now
responsible for pages that were deleted by the current VACUUM operation
(this includes half-dead pages from a previous interrupted VACUUM
operation that become fully deleted in _bt_pagedel()). Note that
_bt_pagedel() should never encounter an existing deleted page.
This commit theoretically breaks the ABI of a stable release by changing
the signature of _bt_pagedel(). However, if any third party extension
is actually affected by this, then it must already be completely broken
(since there are numerous assumptions made in _bt_pagedel() that cannot
be met outside of VACUUM). It seems highly unlikely that such an
extension actually exists, in any case.
Author: Peter Geoghegan
Reviewed-By: Masahiko Sawada
Discussion: https://postgr.es/m/CAH2-WzkrXBcMQWAYUJMFTTvzx_r4q=pYSjDe07JnUXhe+OZnJA@mail.gmail.com
Backpatch: 11-, where the "skip full scan" feature was introduced.
M src/backend/access/nbtree/nbtpage.c
M src/backend/access/nbtree/nbtree.c
M src/include/access/nbtree.h
Fix full text search to handle NOT above a phrase search correctly.
commit : 98a4d6950b24bd02a4573813b7157f2710f1ec7a
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Mon, 27 Apr 2020 12:21:04 -0400
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Mon, 27 Apr 2020 12:21:04 -0400
Queries such as '!(foo<->bar)' failed to find matching rows when
implemented as a GiST or GIN index search. That's because of
failing to handle phrase searches as tri-valued when considering
a query without any position information for the target tsvector.
We can only say that the phrase operator might match, not that it
does match; and therefore its NOT also might match. The previous
coding incorrectly inverted the approximate phrase result to
decide that there was certainly no match.
To fix, we need to make TS_phrase_execute return a real ternary result,
and then bubble that up accurately in TS_execute. As long as we have
to do that anyway, we can simplify the baroque things TS_phrase_execute
was doing internally to manage tri-valued searching with only a bool
as explicit result.
For now, I left the externally-visible result of TS_execute as a plain
bool. There do not appear to be any outside callers that need to
distinguish a three-way result, given that they passed in a flag
saying what to do in the absence of position data. This might need
to change someday, but we wouldn't want to back-patch such a change.
Although tsginidx.c has its own TS_execute_ternary implementation for
use at upper index levels, that sadly managed to get this case wrong
as well :-(. Fixing it is a lot easier fortunately.
Per bug #16388 from Charles Offenbacher. Back-patch to 9.6 where
phrase search was introduced.
Discussion: https://postgr.es/m/16388-98cffba38d0b7e6e@postgresql.org
M src/backend/utils/adt/tsginidx.c
M src/backend/utils/adt/tsvector_op.c
M src/test/regress/data/tsearch.data
M src/test/regress/expected/tsearch.out
M src/test/regress/expected/tstypes.out
M src/test/regress/sql/tsearch.sql
M src/test/regress/sql/tstypes.sql
Fix error case for CREATE ROLE ... IN ROLE.
commit : 0f4970d1a9b97f7d57cb3dc281532e6034c4ca48
author : Andrew Gierth <rhodiumtoad@postgresql.org>
date : Sat, 25 Apr 2020 05:10:19 +0100
committer: Andrew Gierth <rhodiumtoad@postgresql.org>
date : Sat, 25 Apr 2020 05:10:19 +0100
CreateRole() was passing a Value node, not a RoleSpec node, for the
newly-created role name when adding the role as a member of existing
roles for the IN ROLE syntax.
This mistake went unnoticed because the node in question is used only
for error messages and is not accessed on non-error paths.
In older pg versions (such as 9.5 where this was found), this results
in an "unexpected node type" error in place of the real error. That
node type check was removed at some point, after which the code would
accidentally fail to fail on 64-bit platforms (on which accessing the
Value node as if it were a RoleSpec would be mostly harmless) or give
an "unexpected role type" error on 32-bit platforms.
Fix the code to pass the correct node type, and add an lfirst_node
assertion just in case.
Per report on irc from user m1chelangelo.
Backpatch all the way, because this error has been around for a long
time.
M src/backend/commands/user.c
Update Windows timezone name list to include currently-known zones.
commit : b31f9fd63341441717ddd364cfef9a89afb75677
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Fri, 24 Apr 2020 17:53:23 -0400
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Fri, 24 Apr 2020 17:53:23 -0400
Thanks to Juan José Santamaría Flecha.
Discussion: https://postgr.es/m/5752.1587740484@sss.pgh.pa.us
M src/bin/initdb/findtimezone.c
M src/tools/win32tzlist.pl
Improve placement of "display name" comment in win32_tzmap[] entries.
commit : 99c9ed224227596d61a47e8ed0cb23ebd5024ca8
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Fri, 24 Apr 2020 17:21:44 -0400
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Fri, 24 Apr 2020 17:21:44 -0400
Sticking this comment at the end of the last line was a bad idea: it's
not particularly readable, and it tempts pgindent to mess with line
breaks within the comment, which in turn reveals that win32tzlist.pl's
clean_displayname() does the wrong thing to clean up such line breaks.
While that's not hard to fix, there's basically no excuse for this
arrangement to begin with, especially since it makes the table layout
needlessly vary across back branches with different pgindent rules.
Let's just put the comment inside the braces, instead.
This commit just moves and reformats the comments, and updates
win32tzlist.pl to match; there's no actual data change.
Per odd-looking results from Juan José Santamaría Flecha.
Back-patch, since the point is to make win32_tzmap[] look the
same in all supported branches again.
Discussion: https://postgr.es/m/5752.1587740484@sss.pgh.pa.us
M src/bin/initdb/findtimezone.c
M src/tools/win32tzlist.pl
Repair performance regression in information_schema.triggers view.
commit : 776f6d3d0464d5939579ce259a0831dd662a08b8
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Fri, 24 Apr 2020 12:02:36 -0400
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Fri, 24 Apr 2020 12:02:36 -0400
Commit 32ff26911 introduced use of rank() into the triggers view to
calculate the spec-mandated action_order column. As written, this
prevents query constraints on the table-name column from being pushed
below the window aggregate step. That's bad for performance of this
typical usage pattern, since the view now has to be evaluated for all
tables not just the one(s) the user wants to see. It's also the cause
of some recent buildfarm failures, in which trying to evaluate the view
rows for triggers in process of being dropped resulted in "cache lookup
failed for function NNN" errors. Those rows aren't of interest to the
test script doing the query, but the filter that would eliminate them
is being applied too late. None of this happened before the rank()
call was there, so it's a regression compared to v10 and before.
We can improve matters by changing the rank() call so that instead of
partitioning by OIDs, it partitions by nspname and relname, casting
those to sql_identifier so that they match the respective view output
columns exactly. The planner has enough intelligence to know that
constraints on partitioning columns are safe to push down, so this
eliminates the performance problem and the regression test failure
risk. We could make the other partitioning columns match view outputs
as well, but it'd be more complicated and the performance benefits
are questionable.
Side note: as this stands, the planner will push down constraints on
event_object_table and trigger_schema, but not on event_object_schema,
because it checks for ressortgroupref matches not expression
equivalence. That might be worth improving someday, but it's not
necessary to fix the immediate concern.
Back-patch to v11 where the rank() call was added. Ordinarily we'd not
change information_schema in released branches, but the test failure has
been seen in v12 and presumably could happen in v11 as well, so we need
to do this to keep the buildfarm happy. The change is harmless so far
as users are concerned. Some might wish to apply it to existing
installations if performance of this type of query is of concern,
but those who don't are no worse off.
I bumped catversion in HEAD as a pro forma matter (there's no
catalog incompatibility that would really require a re-initdb).
Obviously that can't be done in the back branches.
Discussion: https://postgr.es/m/5891.1587594470@sss.pgh.pa.us
M src/backend/catalog/information_schema.sql
Update time zone data files to tzdata release 2020a.
commit : eb335bc62bba668587c7720d7db15ac5d0f05b80
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Fri, 24 Apr 2020 10:54:47 -0400
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Fri, 24 Apr 2020 10:54:47 -0400
DST law changes in Morocco and the Canadian Yukon.
Historical corrections for Shanghai.
The America/Godthab zone is renamed to America/Nuuk to reflect
current English usage; however, the old name remains available as a
compatibility link.
M src/timezone/data/tzdata.zi
Remove some unstable parts from new TAP test for archive status check
commit : 0d04e9d76aca0be5440d172ba5492389a6f6beb8
author : Michael Paquier <michael@paquier.xyz>
date : Fri, 24 Apr 2020 11:34:03 +0900
committer: Michael Paquier <michael@paquier.xyz>
date : Fri, 24 Apr 2020 11:34:03 +0900
The test is proving to have timing issues when looking at archive status
files on standbys after crash recovery, while other parts of the test
rely on pg_stat_archiver as a wait point to make sure that a given state
of the archiving is reached. The coverage is not heavily impacted by
the removal those extra tests.
Per reports from several buildfarm animals, like crake, piculet,
culicidae and francolin.
Discussion: https://postgr.es/m/20200424005929.GK33034@paquier.xyz
Backpatch-through: 9.5
M src/test/recovery/t/020_archive_status.pl
Fix handling of WAL segments ready to be archived during crash recovery
commit : 2d24ca00b7509fa79744c25b7d8d9766dcb7aa91
author : Michael Paquier <michael@paquier.xyz>
date : Fri, 24 Apr 2020 08:48:40 +0900
committer: Michael Paquier <michael@paquier.xyz>
date : Fri, 24 Apr 2020 08:48:40 +0900
78ea8b5 has fixed an issue related to the recycling of WAL segments on
standbys depending on archive_mode. However, it has introduced a
regression with the handling of WAL segments ready to be archived during
crash recovery, causing those files to be recycled without getting
archived.
This commit fixes the regression by tracking in shared memory if a live
cluster is either in crash recovery or archive recovery as the handling
of WAL segments ready to be archived is different in both cases (those
WAL segments should not be removed during crash recovery), and by using
this new shared memory state to decide if a segment can be recycled or
not. Previously, it was not possible to know if a cluster was in crash
recovery or archive recovery as the shared state was able to track only
if recovery was happening or not, leading to the problem.
A set of TAP tests is added to close the gap here, making sure that WAL
segments ready to be archived are correctly handled when a cluster is in
archive or crash recovery with archive_mode set to "on" or "always", for
both standby and primary.
Reported-by: Benoît Lobréau
Author: Jehan-Guillaume de Rorthais
Reviewed-by: Kyotaro Horiguchi, Fujii Masao, Michael Paquier
Discussion: https://postgr.es/m/20200331172229.40ee00dc@firost
Backpatch-through: 9.5
M src/backend/access/transam/xlog.c
M src/backend/access/transam/xlogarchive.c
M src/include/access/xlog.h
A src/test/recovery/t/020_archive_status.pl
docs: land height is "elevation", not "altitude"
commit : 34b70208a322b8cfd67d00377fb6c4c5541e5d87
author : Bruce Momjian <bruce@momjian.us>
date : Wed, 22 Apr 2020 16:23:19 -0400
committer: Bruce Momjian <bruce@momjian.us>
date : Wed, 22 Apr 2020 16:23:19 -0400
See https://mapscaping.com/blogs/geo-candy/what-is-the-difference-between-elevation-relief-and-altitude
No patching of regression tests.
Reported-by: taf1@cornell.edu
Discussion: https://postgr.es/m/158506544539.679.2278386310645558048@wrigleys.postgresql.org
Backpatch-through: 9.5
M doc/src/sgml/advanced.sgml
M doc/src/sgml/ddl.sgml
Fix memory leak in libpq when using sslmode=verify-full
commit : 35d08658d1cccc3f3c248dfc211bdff96fddfead
author : Michael Paquier <michael@paquier.xyz>
date : Wed, 22 Apr 2020 07:27:49 +0900
committer: Michael Paquier <michael@paquier.xyz>
date : Wed, 22 Apr 2020 07:27:49 +0900
Checking if Subject Alternative Names (SANs) from a certificate match
with the hostname connected to leaked memory after each lookup done.
This is broken since acd08d7 that added support for SANs in SSL
certificates, so backpatch down to 9.5.
Author: Roman Peshkurov
Reviewed-by: Hamid Akhtar, Michael Paquier, David Steele
Discussion: https://postgr.es/m/CALLDf-pZ-E3mjxd5=bnHsDu9zHEOnpgPgdnO84E2RuwMCjjyPw@mail.gmail.com
Backpatch-through: 9.5
M src/interfaces/libpq/fe-secure-openssl.c
Document partitiong tables ancillary object handling some more
commit : 97dcd5cd1500184903ae66ea9629efb04e4da0b9
author : Alvaro Herrera <alvherre@alvh.no-ip.org>
date : Tue, 21 Apr 2020 17:14:18 -0400
committer: Alvaro Herrera <alvherre@alvh.no-ip.org>
date : Tue, 21 Apr 2020 17:14:18 -0400
Add a couple of lines to make it explicit that indexes, constraints,
triggers are added, removed, or left alone.
Backpatch to pg11.
Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
Reviewed-by: Justin Pryzby <pryzby@telsasoft.com>
Discussion: https://postgr.es/m/20200421162038.GA18628@alvherre.pgsql
M doc/src/sgml/ref/alter_table.sgml
M doc/src/sgml/ref/create_table.sgml
Fix possible crash during FATAL exit from reindexing.
commit : 56259c377f4a70c967aa6812bb09ee64642acd8f
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Tue, 21 Apr 2020 15:58:42 -0400
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Tue, 21 Apr 2020 15:58:42 -0400
index.c supposed that it could just use a PG_TRY block to clean up the
state associated with an active REINDEX operation. However, that code
doesn't run if we do a FATAL exit --- for example, due to a SIGTERM
shutdown signal --- while the REINDEX is happening. And that state does
get consulted during catalog accesses, which makes it problematic if we
do any catalog accesses during shutdown --- for example, to clean up any
temp tables created in the session.
If this combination of circumstances occurred, we could find ourselves
trying to access already-freed memory. In debug builds that'd fairly
reliably cause an assertion failure. In production we might often
get away with it, but with some bad luck it could cause a core dump.
Another possible bad outcome is an erroneous conclusion that an
index-to-be-accessed is being reindexed; but it looks like that would
be unlikely to have any consequences worse than failing to drop temp
tables right away. (They'd still get dropped by the next session that
uses that temp schema.)
To fix, get rid of the use of PG_TRY here, and instead hook into
the transaction abort mechanisms to clean up reindex state.
Per bug #16378 from Alexander Lakhin. This has been wrong for a
very long time, so back-patch to all supported branches.
Discussion: https://postgr.es/m/16378-7a70ca41b3ec2009@postgresql.org
M src/backend/access/transam/xact.c
M src/backend/catalog/index.c
M src/include/catalog/index.h
Fix minor violations of FunctionCallInvoke usage protocol.
commit : 6ab98db1ad48df3cf57d68415797059a8baa5038
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Tue, 21 Apr 2020 14:23:42 -0400
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Tue, 21 Apr 2020 14:23:42 -0400
Working on commit 1c455078b led me to check through FunctionCallInvoke
call sites to see if every one was being honest about (a) making sure
that fcinfo.isnull is initially false, and (b) checking its state after
the call. Sure enough, I found some violations.
The main one is that finalize_partialaggregate re-used serialfn_fcinfo
without resetting isnull, even though it clearly intends to cater for
serialfns that return NULL. There would only be an issue with a
non-strict serialfn, since it's unlikely that a serialfn would return
NULL for non-null input. We have no non-strict serialfns in core, and
there may be none in the wild either, which would account for the lack
of complaints. Still, it's clearly wrong, so back-patch that fix to
9.6 where finalize_partialaggregate was introduced.
Also, arrayfuncs.c and rowtypes.c contained various callers that were
not bothering to check for result nulls. While what's being called is
a comparison or hash function that probably *shouldn't* return null,
that's a lousy excuse for not having any check at all. There are
existing places that just Assert(!fcinfo->isnull) in comparable
situations, so I added that to the places that were calling btree
comparison or hash support functions. In the places calling
boolean-returning equality functions, it's quite cheap to have them
treat isnull as FALSE, so make those places do that. Also remove some
"locfcinfo->isnull = false" assignments that are unnecessary given the
assumption that no previous call returned null. These changes seem like
mostly neatnik-ism or debugging support, so I didn't back-patch.
M src/backend/executor/nodeAgg.c
M src/include/fmgr.h
Fix detaching partitions with cloned row triggers
commit : 0b83c47216b0fe71a8a0e880eb550a09f06dad38
author : Alvaro Herrera <alvherre@alvh.no-ip.org>
date : Tue, 21 Apr 2020 13:57:00 -0400
committer: Alvaro Herrera <alvherre@alvh.no-ip.org>
date : Tue, 21 Apr 2020 13:57:00 -0400
When a partition is detached, any triggers that had been cloned from its
parent were not properly disentangled from its parent triggers.
This resulted in triggers that could not be dropped because they
depended on the trigger in the trigger in the no-longer-parent table:
ALTER TABLE t DETACH PARTITION t1;
DROP TRIGGER trig ON t1;
ERROR: cannot drop trigger trig on table t1 because trigger trig on table t requires it
HINT: You can drop trigger trig on table t instead.
Moreover the table can no longer be re-attached to its parent, because
the trigger name is already taken:
ALTER TABLE t ATTACH PARTITION t1 FOR VALUES FROM (1)TO(2);
ERROR: trigger "trig" for relation "t1" already exists
The former is a bug introduced in commit 86f575948c77. (The latter is
not necessarily a bug, but it makes the bug more uncomfortable.)
To avoid the complexity that would be needed to tell whether the trigger
has a local definition that has to be merged with the one coming from
the parent table, establish the behavior that the trigger is removed
when the table is detached.
Backpatch to pg11.
Author: Justin Pryzby <pryzby@telsasoft.com>
Reviewed-by: Amit Langote <amitlangote09@gmail.com>
Reviewed-by: Álvaro Herrera <alvherre@alvh.no-ip.org>
Discussion: https://www.postgresql.org/message-id/flat/20200408152412.GZ2228@telsasoft.com
M doc/src/sgml/ref/create_trigger.sgml
M src/backend/commands/tablecmds.c
M src/test/regress/expected/triggers.out
M src/test/regress/sql/triggers.sql
doc: change SGML markup "figure" to "example"
commit : ef27e304f2f62e0f27c66ad3ca6ca9c76546baee
author : Bruce Momjian <bruce@momjian.us>
date : Mon, 20 Apr 2020 21:41:13 -0400
committer: Bruce Momjian <bruce@momjian.us>
date : Mon, 20 Apr 2020 21:41:13 -0400
Reported-by: Jürgen Purtz
Discussion: https://postgr.es/m/709d7809-d7f4-8175-47f3-4d131341bba8@purtz.de
Author: Jürgen Purtz
Backpatch-through: 9.5
M doc/src/sgml/func.sgml
Allow pg_read_all_stats to access all stats views again
commit : 3d4652f67d1f6c896f4bc836e08f38aaa0b3de41
author : Magnus Hagander <magnus@hagander.net>
date : Mon, 20 Apr 2020 12:53:40 +0200
committer: Magnus Hagander <magnus@hagander.net>
date : Mon, 20 Apr 2020 12:53:40 +0200
The views pg_stat_progress_* had not gotten the memo that
pg_read_all_stats is supposed to be able to read all statistics. Also
make a pass over all text-returning pg_stat_xyz functions that could
return "insufficient privilege" and make sure they also respect
pg_read_all_status.
Reported-by: Andrey M. Borodin
Reviewed-by: Andrey M. Borodin, Kyotaro Horiguchi
Discussion: https://postgr.es/m/13145F2F-8458-4977-9D2D-7B2E862E5722@yandex-team.ru
M src/backend/utils/adt/pgstatfuncs.c
Fix race conditions in synchronous standby management.
commit : b3fa6d016d826039799686d68aa27a4bee3e6052
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Sat, 18 Apr 2020 14:02:44 -0400
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Sat, 18 Apr 2020 14:02:44 -0400
We have repeatedly seen the buildfarm reach the Assert(false) in
SyncRepGetSyncStandbysPriority. This apparently is due to failing to
consider the possibility that the sync_standby_priority values in
shared memory might be inconsistent; but they will be whenever only
some of the walsenders have updated their values after a change in
the synchronous_standby_names setting. That function is vastly too
complex for what it does, anyway, so rewriting it seems better than
trying to apply a band-aid fix.
Furthermore, the API of SyncRepGetSyncStandbys is broken by design:
it returns a list of WalSnd array indexes, but there is nothing
guaranteeing that the contents of the WalSnd array remain stable.
Thus, if some walsender exits and then a new walsender process
takes over that WalSnd array slot, a caller might make use of
WAL position data that it should not, potentially leading to
incorrect decisions about whether to release transactions that
are waiting for synchronous commit.
To fix, replace SyncRepGetSyncStandbys with a new function
SyncRepGetCandidateStandbys that copies all the required data
from shared memory while holding the relevant mutexes. If the
associated walsender process then exits, this data is still safe to
make release decisions with, since we know that that much WAL *was*
sent to a valid standby server. This incidentally means that we no
longer need to treat sync_standby_priority as protected by the
SyncRepLock rather than the per-walsender mutex.
SyncRepGetSyncStandbys is no longer used by the core code, so remove
it entirely in HEAD. However, it seems possible that external code is
relying on that function, so do not remove it from the back branches.
Instead, just remove the known-incorrect Assert. When the bug occurs,
the function will return a too-short list, which callers should treat
as meaning there are not enough sync standbys, which seems like a
reasonably safe fallback until the inconsistent state is resolved.
Moreover it's bug-compatible with what has been happening in non-assert
builds. We cannot do anything about the walsender-replacement race
condition without an API/ABI break.
The bogus assertion exists back to 9.6, but 9.6 is sufficiently
different from the later branches that the patch doesn't apply at all.
I chose to just remove the bogus assertion in 9.6, feeling that the
probability of a bad outcome from the walsender-replacement race
condition is too low to justify rewriting the whole patch for 9.6.
Discussion: https://postgr.es/m/21519.1585272409@sss.pgh.pa.us
M src/backend/replication/syncrep.c
M src/backend/replication/walsender.c
M src/include/replication/syncrep.h
M src/include/replication/walsender_private.h
Use a slightly more liberal regex to detect Visual Studio version
commit : 758814224c8cce90c89577622c89fbf7bdfa43a4
author : Andrew Dunstan <andrew@dunslane.net>
date : Fri, 17 Apr 2020 14:52:42 -0400
committer: Andrew Dunstan <andrew@dunslane.net>
date : Fri, 17 Apr 2020 14:52:42 -0400
Apparently in some language versions of Visual Studio nmake outputs some
material after the version number and before the end of the line. This
has been seen in Chinese versions. Therefore, we no longer demand that
the version string comes at the end of a line.
Per complaint from Cuiping Lin.
Backpatch to all live branches.
M src/tools/msvc/VSObjectFactory.pm
Fix minor memory leak in pg_basebackup and pg_receivewal
commit : 213e2b7363cd068b9c4481353c3b72729c069b97
author : Michael Paquier <michael@paquier.xyz>
date : Fri, 17 Apr 2020 10:45:20 +0900
committer: Michael Paquier <michael@paquier.xyz>
date : Fri, 17 Apr 2020 10:45:20 +0900
The result of the query used to retrieve the WAL segment size from the
backend was not getting freed in two code paths. Both pg_basebackup and
pg_receivewal exit immediately if a failure happened on this query, so
this was not an actual problem, but it could be an issue if this code
gets used for other tools in different ways, be they future tools in
this code tree or external, existing, ones.
Oversight in commit fc49e24, so backpatch down to 11.
Author: Jie Zhang
Discussion: https://postgr.es/m/970ad9508461469b9450b64027842331@G08CNEXMBPEKD06.g08.fujitsu.local
Backpatch-through: 11
M src/bin/pg_basebackup/streamutil.c
Fix cache reference leak in contrib/sepgsql.
commit : cc2737ab03128fb0bc46af6c63289f6bea07068c
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Thu, 16 Apr 2020 14:45:54 -0400
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Thu, 16 Apr 2020 14:45:54 -0400
fixup_whole_row_references() did the wrong thing with a dropped column,
resulting in a commit-time warning about a cache reference leak.
I (tgl) added a test case exercising this, but back-patched the test
only as far as v10; the patch didn't apply cleanly to 9.6 and it
didn't seem worth the trouble to adapt it. The bug is pretty old
though, so apply the code change all the way back.
Michael Luo, with cosmetic improvements by me
Discussion: https://postgr.es/m/BYAPR08MB5606D1453D7F50E2AF4D2FD29AD80@BYAPR08MB5606.namprd08.prod.outlook.com
M contrib/sepgsql/dml.c
M contrib/sepgsql/expected/dml.out
M contrib/sepgsql/sql/dml.sql
Fix minor memory leak in pg_dump
commit : 7347855c46527920a86d3217dc140a8ae1060836
author : Michael Paquier <michael@paquier.xyz>
date : Wed, 15 Apr 2020 15:56:48 +0900
committer: Michael Paquier <michael@paquier.xyz>
date : Wed, 15 Apr 2020 15:56:48 +0900
A query used to read default ACL information from the catalogs did not
free a set of PQExpBuffer.
Oversight in commit e2090d9, so backpatch down to 9.6.
Author: Jie Zhang
Reviewed-by: Sawada Masahiko
Discussion: https://postgr.es/m/05bcbc5857f948efa0b451b85a48ae10@G08CNEXMBPEKD06.g08.fujitsu.local
Backpatch-through: 9.6
M src/bin/pg_dump/pg_dump.c
Add a wait_for_catchup() before immediate stop of a test master.
commit : b33ac1a658843bd3abf7450a51cfbcaf7d199f29
author : Noah Misch <noah@leadboat.com>
date : Mon, 13 Apr 2020 18:47:28 -0700
committer: Noah Misch <noah@leadboat.com>
date : Mon, 13 Apr 2020 18:47:28 -0700
Per buildfarm member hoverfly, a slow walsender could make the test
fail. Back-patch to v10, where the test was introduced.
Discussion: https://postgr.es/m/20200414013849.GA886648@rfd.leadboat.com
M src/test/recovery/t/010_logical_decoding_timelines.pl
Clear dangling pointer to avoid bogus EXPLAIN printout in a corner case.
commit : f3d06e524073798631186f1195228669aab54410
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Sat, 11 Apr 2020 12:29:06 -0400
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Sat, 11 Apr 2020 12:29:06 -0400
ExecReScanHashJoin will destroy the join's hash table if it expects
that the inner relation will produce different rows on rescan.
Up to now it's not bothered to clear the additional pointer to that
hash table that exists in the child HashState node. However, it's
possible for the query to terminate without building a fresh hash
table (this happens if the outer relation is found to be empty
during the final rescan). So we can end with a dangling pointer
to a deleted hash table. That was harmless originally, but since
9.0 EXPLAIN ANALYZE has used that pointer to print hash table
statistics. In debug builds this reproducibly results in garbage
statistics. In non-debug builds there's frequently no ill effects,
but in principle one could get wrong EXPLAIN ANALYZE output, or
perhaps even a crash if free() has released the hashtable memory
back to the OS.
To fix, just make sure we clear the additional pointer when destroying
the hash table. In problematic cases, EXPLAIN ANALYZE will then print
no hashtable statistics (reverting to its pre-9.0 behavior). This isn't
ideal, but since the problem manifests only in unusual corner cases,
it's hard to justify taking any risks to do better in the back
branches. A follow-on patch will improve matters in HEAD.
Konstantin Knizhnik and Tom Lane, per diagnosis by Thomas Munro
of a trouble report from Alvaro Herrera.
Discussion: https://postgr.es/m/20200323165059.GA24950@alvherre.pgsql
M src/backend/executor/nodeHashjoin.c
Doc: clarify locking requirements for ALTER TABLE ADD FOREIGN KEY.
commit : aa4416dcd924a49e766baae9c73e884249d687d0
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Fri, 10 Apr 2020 13:12:58 -0400
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Fri, 10 Apr 2020 13:12:58 -0400
The docs explained that a SHARE ROW EXCLUSIVE lock is needed on the
referenced table, but failed to say the same about the table being
altered. Since the page says that ACCESS EXCLUSIVE lock is taken
unless otherwise stated, this left readers with the wrong conclusion.
Discussion: https://postgr.es/m/834603375.3470346.1586482852542@mail.yahoo.com
M doc/src/sgml/ref/alter_table.sgml
Doc: sync CREATE GROUP syntax synopsis with CREATE ROLE.
commit : b75aa49bb8cbc96fc741791bc021a83a697a1307
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Fri, 10 Apr 2020 10:44:10 -0400
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Fri, 10 Apr 2020 10:44:10 -0400
CREATE GROUP is an exact alias for CREATE ROLE, and CREATE USER is
almost an exact alias, as can easily be confirmed by checking the
code. So the man page syntax descriptions ought to match up. The
last few additions of role options seem to have forgotten to update
create_group.sgml, though. Fix that, and add a naggy reminder to
create_role.sgml in hopes of not forgetting again.
Discussion: https://postgr.es/m/158647836143.655.9853963229391401576@wrigleys.postgresql.org
M doc/src/sgml/ref/create_group.sgml
M doc/src/sgml/ref/create_role.sgml
Further cleanup of ts_headline code.
commit : d9a3fe4c56fe5ae2cfa9db88a208443f391eae89
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Thu, 9 Apr 2020 15:38:43 -0400
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Thu, 9 Apr 2020 15:38:43 -0400
Suppress a probably-meaningless uninitialized-variable warning
(induced by my previous patch, I'm sorry to say).
Improve mark_hl_fragments()'s test for overlapping cover strings:
it failed to consider the possibility that the current string is
strictly within another one. That's unlikely given the preceding
splitting into MaxWords fragments, but I don't think it's impossible.
Discussion: https://postgr.es/m/16345-2e0cf5cddbdcd3b4@postgresql.org
M src/backend/tsearch/wparser_def.c
Doc: improve documentation about ts_headline() function.
commit : 7627f64ba21a2734192c6832d01a9c38948872bc
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Thu, 9 Apr 2020 15:11:08 -0400
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Thu, 9 Apr 2020 15:11:08 -0400
Now that I've had my nose in that code, I thought the docs about
it left something to be desired.
M doc/src/sgml/textsearch.sgml
Fix default text search parser's ts_headline code for phrase queries.
commit : 91be1d1906a740725147c4e2a81ccda10543b714
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Thu, 9 Apr 2020 13:19:23 -0400
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Thu, 9 Apr 2020 13:19:23 -0400
This code could produce very poor results when asked to highlight a
string based on a query using phrase-match operators. The root cause
is that hlCover(), which is supposed to find a minimal substring that
matches the query, was written assuming that word position is not
significant. I'm only 95% convinced that its algorithm was correct even
for plain AND/OR queries; but it definitely fails completely for phrase
matches, causing it to possibly not identify a cover string at all.
Hence, rewrite hlCover() with a less-tense algorithm that just tries
all the possible substrings, earlier and shorter ones first. (This is
not as bad as it sounds performance-wise, because all of the string
matching has been done already: the repeated tsquery match checks
boil down to pointer comparisons.)
Unfortunately, since that approach produces more candidate cover
strings than before, it also exposes that there were bugs in the
heuristics in mark_hl_words() for selecting a best cover string.
Fixes there include:
* Do not apply the ShortWord filter to words that appear in the query.
* Remove a misguided optimization for quickly rejecting a cover.
* Fix order-of-operation bug that could cause computation of a
wrong figure of merit (poslen) when shortening a cover.
* Change the preference rule so that candidate headlines that do not
include their whole cover string (after MaxWords trimming) are lowest
priority, since they may not actually satisfy the user's query.
This results in some changes in existing regression test cases,
but they all seem reasonable. Note in particular that the tests
involving strings like "1 2 3" were previously being affected by
the ShortWord filter, masking the normal matching behavior.
Per bug #16345 from Augustinas Jokubauskas; the new test cases are
based on that example. Back-patch to 9.6 where phrase search was
added to tsquery.
Discussion: https://postgr.es/m/16345-2e0cf5cddbdcd3b4@postgresql.org
M src/backend/tsearch/wparser_def.c
M src/test/regress/expected/tsearch.out
M src/test/regress/sql/tsearch.sql
Cosmetic improvements for default text search parser's ts_headline code.
commit : ff081d6bb8726e14c3bc1e8a24b4814b3d55ac25
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Thu, 9 Apr 2020 12:37:00 -0400
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Thu, 9 Apr 2020 12:37:00 -0400
This code was woefully unreadable and under-commented. Try to improve
matters by adding comments, using some macros to make complicated
if-tests more readable, using boolean type where appropriate, etc.
There are a couple of tiny coding improvements too, but this commit
includes (I hope) no behavioral change.
Nonetheless, back-patch as far as 9.6, because a followup bug-fixing
commit depends on this.
Discussion: https://postgr.es/m/16345-2e0cf5cddbdcd3b4@postgresql.org
M src/backend/tsearch/wparser_def.c
Allow parallel create index to accumulate buffer usage stats.
commit : f179e9f01b65dd880b204599187ffff29ecba91e
author : Amit Kapila <akapila@postgresql.org>
date : Thu, 9 Apr 2020 09:25:57 +0530
committer: Amit Kapila <akapila@postgresql.org>
date : Thu, 9 Apr 2020 09:25:57 +0530
Currently, we don't account for buffer usage incurred by parallel workers
for parallel create index. This commit allows each worker to record the
buffer usage stats and leader backend to accumulate that stats at the
end of the operation. This will allow pg_stat_statements to display
correct buffer usage stats for (parallel) create index command.
Reported-by: Julien Rouhaud
Author: Sawada Masahiko
Reviewed-by: Dilip Kumar, Julien Rouhaud and Amit Kapila
Backpatch-through: 11, where this was introduced
Discussion: https://postgr.es/m/20200328151721.GB12854@nol
M src/backend/access/nbtree/nbtsort.c
Fix pg_dump/pg_restore to restore event trigger comments later.
commit : d050c611373182ec87afd4912a330c4dac8684cc
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Wed, 8 Apr 2020 11:23:39 -0400
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Wed, 8 Apr 2020 11:23:39 -0400
Repair an oversight in commit 8728b2c70: if we're postponing restore
of event triggers to the end, we must also postpone restoring any
comments on them, since of course we cannot create the comments first.
(This opens yet another opportunity for an event trigger to bollix
the restore, but there's no help for that.)
Per bug #16346 from Alexander Lakhin.
Like the previous commit, back-patch to all supported branches.
Hamid Akhtar and Tom Lane
Discussion: https://postgr.es/m/16346-6210ad7a0ea81be1@postgresql.org
M src/bin/pg_dump/pg_backup_archiver.c
Fix circle_in to accept "(x,y),r" as it's advertised to do.
commit : 5fae6641015578538111c8c0515fa62c4b68f1ae
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Tue, 7 Apr 2020 20:50:02 -0400
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Tue, 7 Apr 2020 20:50:02 -0400
Our documentation describes four allowed input syntaxes for circles,
but the regression tests tried only three ... with predictable
consequences. Remarkably, this has been wrong since the circle
datatype was added in 1997, but nobody noticed till now.
David Zhang, with some help from me
Discussion: https://postgr.es/m/332c47fa-d951-7574-b5cc-a8f7f7201202@highgo.ca
M src/backend/utils/adt/geo_ops.c
M src/test/regress/expected/circle.out
M src/test/regress/sql/circle.sql
Adjust bytea get_bit/set_bit to cope with bytea strings > 256MB.
commit : 5d79fc60c57d6fee25bc694d466702fc5edb8855
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Tue, 7 Apr 2020 16:30:55 -0400
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Tue, 7 Apr 2020 16:30:55 -0400
Since the existing bit number argument can't exceed INT32_MAX, it's
not possible for these functions to manipulate bits beyond the first
256MB of a bytea value. However, it'd be good if they could do at
least that much, and not fall over entirely for longer bytea values.
Adjust the comparisons to be done in int64 arithmetic so that works.
Also tweak the error reports to show sane values in case of overflow.
Also add some test cases to improve the miserable code coverage
of these functions.
Apply patch to back branches only; HEAD has a better solution
as of commit 26a944cf2.
Extracted from a much larger patch by Movead Li
Discussion: https://postgr.es/m/20200312115135445367128@highgo.ca
M src/backend/utils/adt/varlena.c
M src/test/regress/expected/strings.out
M src/test/regress/sql/strings.sql
Preserve clustered index after rewrites with ALTER TABLE
commit : 41faafbd75a5c70fa94bf57e408e6b29c4425ceb
author : Michael Paquier <michael@paquier.xyz>
date : Mon, 6 Apr 2020 11:05:54 +0900
committer: Michael Paquier <michael@paquier.xyz>
date : Mon, 6 Apr 2020 11:05:54 +0900
A table rewritten by ALTER TABLE would lose tracking of an index usable
for CLUSTER. This setting is tracked by pg_index.indisclustered and is
controlled by ALTER TABLE, so some extra work was needed to restore it
properly. Note that ALTER TABLE only marks the index that can be used
for clustering, and does not do the actual operation.
Author: Amit Langote, Justin Pryzby
Reviewed-by: Ibrar Ahmed, Michael Paquier
Discussion: https://postgr.es/m/20200202161718.GI13621@telsasoft.com
Backpatch-through: 9.5
M src/backend/commands/tablecmds.c
M src/backend/utils/cache/lsyscache.c
M src/include/utils/lsyscache.h
M src/test/regress/expected/alter_table.out
M src/test/regress/sql/alter_table.sql
Use TransactionXmin instead of RecentGlobalXmin in heap_abort_speculative().
commit : 1ca97af3ede47486a513df44cd8ac2fc242c1631
author : Andres Freund <andres@anarazel.de>
date : Sun, 5 Apr 2020 17:47:30 -0700
committer: Andres Freund <andres@anarazel.de>
date : Sun, 5 Apr 2020 17:47:30 -0700
There's a very low risk that RecentGlobalXmin could be far enough in
the past to be older than relfrozenxid, or even wrapped
around. Luckily the consequences of that having happened wouldn't be
too bad - the page wouldn't be pruned for a while.
Avoid that risk by using TransactionXmin instead. As that's announced
via MyPgXact->xmin, it is protected against wrapping around (see code
comments for details around relfrozenxid).
Author: Andres Freund
Discussion: https://postgr.es/m/20200328213023.s4eyijhdosuc4vcj@alap3.anarazel.de
Backpatch: 9.5-
M src/backend/access/heap/heapam.c
Save errno across LWLockRelease() calls
commit : 250041a561a8cf34d981b2adbcf4b3b8030e24fd
author : Peter Eisentraut <peter@eisentraut.org>
date : Sun, 5 Apr 2020 10:02:00 +0200
committer: Peter Eisentraut <peter@eisentraut.org>
date : Sun, 5 Apr 2020 10:02:00 +0200
Fixup for "Drop slot's LWLock before returning from SaveSlotToPath()"
Reported-by: Michael Paquier <michael@paquier.xyz>
M src/backend/replication/slot.c
Fix bugs in gin_fuzzy_search_limit processing.
commit : 0912fb39cab35913907ce0eaa11e0504203153c5
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Fri, 3 Apr 2020 13:15:30 -0400
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Fri, 3 Apr 2020 13:15:30 -0400
entryGetItem()'s three code paths each contained bugs associated
with filtering the entries for gin_fuzzy_search_limit.
The posting-tree path failed to advance "advancePast" after having
decided to filter an item. If we ran out of items on the current
page and needed to advance to the next, what would actually happen
is that entryLoadMoreItems() would re-load the same page. Eventually,
the random dropItem() test would accept one of the same items it'd
previously rejected, and we'd move on --- but it could take awhile
with small gin_fuzzy_search_limit. To add insult to injury, this
case would inevitably cause entryLoadMoreItems() to decide it needed
to re-descend from the root, making things even slower.
The posting-list path failed to implement gin_fuzzy_search_limit
filtering at all, so that all entries in the posting list would
be returned.
The bitmap-result path used a "gotitem" variable that it failed to
update in the one place where it'd actually make a difference, ie
at the one "continue" statement. I think this was unreachable in
practice, because if we'd looped around then it shouldn't be the
case that the entries on the new page are before advancePast.
Still, the "gotitem" variable was contributing nothing to either
clarity or correctness, so get rid of it.
Refactor all three loops so that the termination conditions are
more alike and less unreadable.
The code coverage report showed that we had no coverage at all for
the re-descend-from-root code path in entryLoadMoreItems(), which
seems like a very bad thing, so add a test case that exercises it.
We also had exactly no coverage for gin_fuzzy_search_limit, so add a
simplistic test case that at least hits those code paths a little bit.
Back-patch to all supported branches.
Adé Heyward and Tom Lane
Discussion: https://postgr.es/m/CAEknJCdS-dE1Heddptm7ay2xTbSeADbkaQ8bU2AXRCVC2LdtKQ@mail.gmail.com
M src/backend/access/gin/ginget.c
M src/test/regress/expected/gin.out
M src/test/regress/sql/gin.sql
Fix bogus CALLED_AS_TRIGGER() defenses.
commit : 7b1552283465acc10a88038fe87c7901198c3b5e
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Fri, 3 Apr 2020 11:24:56 -0400
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Fri, 3 Apr 2020 11:24:56 -0400
contrib/lo's lo_manage() thought it could use
trigdata->tg_trigger->tgname in its error message about
not being called as a trigger. That naturally led to a core dump.
unique_key_recheck() figured it could Assert that fcinfo->context
is a TriggerData node in advance of having checked that it's
being called as a trigger. That's harmless in production builds,
and perhaps not that easy to reach in any case, but it's logically
wrong.
The first of these per bug #16340 from William Crowell;
the second from manual inspection of other CALLED_AS_TRIGGER
call sites.
Back-patch the lo.c change to all supported branches, the
other to v10 where the thinko crept in.
Discussion: https://postgr.es/m/16340-591c7449dc7c8c47@postgresql.org
M contrib/lo/lo.c
M src/backend/commands/constraint.c
doc: remove unnecessary INNER keyword
commit : 42da1db7b9d5dd2d3d2e887adb19c6a3c28804b9
author : Bruce Momjian <bruce@momjian.us>
date : Thu, 2 Apr 2020 17:42:09 -0400
committer: Bruce Momjian <bruce@momjian.us>
date : Thu, 2 Apr 2020 17:42:09 -0400
A join that was added in commit 9b2009c4cf that did not use the INNER
keyword but the existing query used it. It was cleaner to remove the
existing INNER keyword.
Reported-by: Peter Eisentraut
Discussion: https://postgr.es/m/a1ffbfda-59d2-5732-e5fb-3df8582b6434@2ndquadrant.com
Backpatch-through: 9.5
M doc/src/sgml/pgbuffercache.sgml
doc: remove comma, related to commit 92d31085e9
commit : a38f099aff2772ecdc6b527289f424d191c18e5e
author : Bruce Momjian <bruce@momjian.us>
date : Thu, 2 Apr 2020 17:27:43 -0400
committer: Bruce Momjian <bruce@momjian.us>
date : Thu, 2 Apr 2020 17:27:43 -0400
Reported-by: Peter Eisentraut
Discussion: https://postgr.es/m/750b8832-d123-7f9b-931e-43ce8321b2d7@2ndquadrant.com
Backpatch-through: 9.5
M doc/src/sgml/func.sgml
Check equality semantics for unique indexes on partitioned tables.
commit : 76ddc88f4dde93154e3553546c7cffe97060a26c
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Wed, 1 Apr 2020 14:49:49 -0400
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Wed, 1 Apr 2020 14:49:49 -0400
We require the partition key to be a subset of the set of columns
being made unique, so that physically-separate indexes on the different
partitions are sufficient to enforce the uniqueness constraint.
The existing code checked that the listed columns appear, but did not
inquire into the index semantics, which is a serious oversight given
that different index opclasses might enforce completely different
notions of uniqueness.
Ideally, perhaps, we'd just match the partition key opfamily to the
index opfamily. But hash partitioning uses hash opfamilies which we
can't directly match to btree opfamilies. Hence, look up the equality
operator in each family, and accept if it's the same operator. This
should be okay in a fairly general sense, since the equality operator
ought to precisely represent the opfamily's notion of uniqueness.
A remaining weak spot is that we don't have a cross-index-AM notion of
which opfamily member is "equality". But we know which one to use for
hash and btree AMs, and those are the only two that are relevant here
at present. (Any non-core AMs that know how to enforce equality are
out of luck, for now.)
Back-patch to v11 where this feature was introduced.
Guancheng Luo, revised a bit by me
Discussion: https://postgr.es/m/D9C3CEF7-04E8-47A1-8300-CA1DCD5ED40D@gmail.com
M src/backend/commands/indexcmds.c
psql: do file completion for \gx
commit : 7054e12e0fb64d7c1573a0b55c01b23b6d5e15eb
author : Bruce Momjian <bruce@momjian.us>
date : Tue, 31 Mar 2020 23:01:33 -0400
committer: Bruce Momjian <bruce@momjian.us>
date : Tue, 31 Mar 2020 23:01:33 -0400
This was missed when the feature was added.
Reported-by: Vik Fearing
Discussion: https://postgr.es/m/eca20529-0b06-b493-ee38-f071a75dcd5b@postgresfriends.org
Backpatch-through: 10
M src/bin/psql/tab-complete.c
doc: remove mention of bitwise operators as solely type-limited
commit : fd802bd92420adf32e872c16b75a7180bde876c7
author : Bruce Momjian <bruce@momjian.us>
date : Tue, 31 Mar 2020 18:44:29 -0400
committer: Bruce Momjian <bruce@momjian.us>
date : Tue, 31 Mar 2020 18:44:29 -0400
There are other operators that have limited number data type support, so
just remove the sentence.
Reported-by: Sergei Agalakov
Discussion: https://postgr.es/m/158032651854.19851.16261832706661813796@wrigleys.postgresql.org
Backpatch-through: 9.5
M doc/src/sgml/func.sgml
doc: clarify hierarchy of objects: global, db, schema, etc.
commit : e472ebd65deb98940fca7a22e940e6cc73592ece
author : Bruce Momjian <bruce@momjian.us>
date : Tue, 31 Mar 2020 18:10:39 -0400
committer: Bruce Momjian <bruce@momjian.us>
date : Tue, 31 Mar 2020 18:10:39 -0400
The previous wording was confusing because it wasn't in decreasing order
and had to backtrack. Also clarify role/user wording.
Reported-by: jbird@nuna.com
Discussion: https://postgr.es/m/158057750885.1123.2806779262588618988@wrigleys.postgresql.org
Backpatch-through: 9.5
M doc/src/sgml/ddl.sgml
M doc/src/sgml/manage-ag.sgml
doc: restore wording from recent patch "rolled back to"
commit : e564c17d2aa283262bc8ee5a12bdd5ce70fa2afd
author : Bruce Momjian <bruce@momjian.us>
date : Tue, 31 Mar 2020 17:52:48 -0400
committer: Bruce Momjian <bruce@momjian.us>
date : Tue, 31 Mar 2020 17:52:48 -0400
Reported-by: Tom Lane
Discussion: https://postgr.es/m/31072.1585690490@sss.pgh.pa.us
Backpatch-through: 9.5 - 12
M doc/src/sgml/mvcc.sgml
doc: clarify when row-level locks are released
commit : 6a4c58158bc01ef6452b0dcb3888d8e7994f0f35
author : Bruce Momjian <bruce@momjian.us>
date : Tue, 31 Mar 2020 17:27:32 -0400
committer: Bruce Momjian <bruce@momjian.us>
date : Tue, 31 Mar 2020 17:27:32 -0400
They are released just like table-level locks. Also clean up wording.
Reported-by: me@sillymon.ch
Discussion: https://postgr.es/m/158074944048.1095.4309647363871637715@wrigleys.postgresql.org
Backpatch-through: 9.5
M doc/src/sgml/mvcc.sgml
doc: add namespace column to pg_buffercache example query
commit : 9e8aec433a29e42fe67a072aa9d9bb1da26145d6
author : Bruce Momjian <bruce@momjian.us>
date : Tue, 31 Mar 2020 17:16:33 -0400
committer: Bruce Momjian <bruce@momjian.us>
date : Tue, 31 Mar 2020 17:16:33 -0400
Without the namespace, the table name could be ambiguous.
Reported-by: adunham@arbormetrix.com
Discussion: https://postgr.es/m/158155175140.23798.2189464781144503491@wrigleys.postgresql.org
Backpatch-through: 9.5
M doc/src/sgml/pgbuffercache.sgml
doc: clarify which table creation is used for inheritance part.
commit : f116356deb75c113751db3410dec2ef59e46db73
author : Bruce Momjian <bruce@momjian.us>
date : Tue, 31 Mar 2020 17:07:43 -0400
committer: Bruce Momjian <bruce@momjian.us>
date : Tue, 31 Mar 2020 17:07:43 -0400
Previously people might assume that the partition syntax version of
CREATE TABLE is to be used for the inheritance partition table example;
mention that the non-partitioned version should be used.
Reported-by: mib@nic.at
Discussion: https://postgr.es/m/158089540905.1098.15071165437284409576@wrigleys.postgresql.org
Backpatch-through: 10
M doc/src/sgml/ddl.sgml
doc: adjust UPDATE/DELETE's FROM/USING to match SELECT's FROM
commit : 3ee692d82f8001c95f3154080886dd764e21d5b0
author : Bruce Momjian <bruce@momjian.us>
date : Tue, 31 Mar 2020 16:31:44 -0400
committer: Bruce Momjian <bruce@momjian.us>
date : Tue, 31 Mar 2020 16:31:44 -0400
Previously the syntax and wording were unclear.
Reported-by: Alexey Bashtanov
Discussion: https://postgr.es/m/968d4724-8e58-788f-7c45-f7b1813824cc@imap.cc
Backpatch-through: 9.5
M doc/src/sgml/ref/delete.sgml
M doc/src/sgml/ref/update.sgml
Teach pg_ls_dir_files() to ignore ENOENT failures from stat().
commit : 5b22ff764b0f60c24d89ec0180476cda361ec126
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Tue, 31 Mar 2020 12:57:55 -0400
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Tue, 31 Mar 2020 12:57:55 -0400
Buildfarm experience shows that this function can fail with ENOENT
if some other process unlinks a file between when we read the directory
entry and when we try to stat() it. The problem is old but we had
not noticed it until 085b6b667 added regression test coverage.
To fix, just ignore ENOENT failures. There is one other case that
this might hide: a symlink that points to nowhere. That seems okay
though, at least better than erroring.
Back-patch to v10 where this function was added, since the regression
test cases were too.
Discussion: https://postgr.es/m/20200308173103.GC1357@telsasoft.com
M src/backend/utils/adt/genfile.c
Back-patch addition of stack overflow and interrupt checks for lquery.
commit : fade4d4dffca760252c0d7ee69598e7b441ed2f4
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Tue, 31 Mar 2020 11:37:44 -0400
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Tue, 31 Mar 2020 11:37:44 -0400
Experimentation shows that it's not hard at all to drive the
old implementation of "ltree ~ lquery" match to stack overflow,
so throw in a check_stack_depth() call, as I just did in HEAD.
I wasn't able to make it take a long time, because all the
pathological cases I tried hit stack overflow first; but
I bet there are some others that do take a long time, so add
CHECK_FOR_INTERRUPTS() too.
Discussion: https://postgr.es/m/CAP_rww=waX2Oo6q+MbMSiZ9ktdj6eaJj0cQzNu=Ry2cCDij5fw@mail.gmail.com
M contrib/ltree/lquery_op.c
Be more careful about extracting encoding from locale strings on Windows.
commit : 4bc3a16677be061e60abd8d9e732c434784566db
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Mon, 30 Mar 2020 11:14:58 -0400
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Mon, 30 Mar 2020 11:14:58 -0400
GetLocaleInfoEx() can fail on strings that setlocale() was perfectly
happy with. A common way for that to happen is if the locale string
is actually a Unix-style string, say "et_EE.UTF-8". In that case,
what's after the dot is an encoding name, not a Windows codepage number;
blindly treating it as a codepage number led to failure, with a fairly
silly error message. Hence, check to see if what's after the dot is
all digits, and if not, treat it as a literal encoding name rather than
a codepage number. This will do the right thing with many Unix-style
locale strings, and produce a more sensible error message otherwise.
Somewhat independently of that, treat a zero (CP_ACP) result from
GetLocaleInfoEx() as meaning that we must use UTF-8 encoding.
Back-patch to all supported branches.
Juan José Santamaría Flecha
Discussion: https://postgr.es/m/24905.1585445371@sss.pgh.pa.us
M src/port/chklocale.c
Doc: correct misstatement about ltree label maximum length.
commit : 550041728d65c78a58fe76f89e68b75d56c39645
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Sun, 29 Mar 2020 18:54:19 -0400
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Sun, 29 Mar 2020 18:54:19 -0400
The documentation says that the max length is 255 bytes, but
code inspection says it's actually 255 characters; and relevant
lengths are stored as uint16 so that that works.
M doc/src/sgml/ltree.sgml
Protect against overflow of ltree.numlevel and lquery.numlevel.
commit : 5feb3d0b3f6bf2f65757acbad6578cc8318f1f70
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Sat, 28 Mar 2020 17:09:51 -0400
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Sat, 28 Mar 2020 17:09:51 -0400
These uint16 fields could be overflowed by excessively long input,
producing strange results. Complain for invalid input.
Likewise check for out-of-range values of the repeat counts in lquery.
(We don't try too hard on that one, notably not bothering to detect
if atoi's result has overflowed.)
Also detect length overflow in ltree_concat.
In passing, be more consistent about whether "syntax error" messages
include the type name. Also, clarify the documentation about what
the size limit is.
This has been broken for a long time, so back-patch to all supported
branches.
Nikita Glukhov, reviewed by Benjie Gillam and Tomas Vondra
Discussion: https://postgr.es/m/CAP_rww=waX2Oo6q+MbMSiZ9ktdj6eaJj0cQzNu=Ry2cCDij5fw@mail.gmail.com
M contrib/ltree/expected/ltree.out
M contrib/ltree/ltree.h
M contrib/ltree/ltree_io.c
M contrib/ltree/ltree_op.c
M contrib/ltree/sql/ltree.sql
M doc/src/sgml/ltree.sgml
Ensure snapshot is registered within ScanPgRelation().
commit : 00a0a428ef503d50b74b8a08d6365a4a0ce04c14
author : Andres Freund <andres@anarazel.de>
date : Sat, 28 Mar 2020 11:52:11 -0700
committer: Andres Freund <andres@anarazel.de>
date : Sat, 28 Mar 2020 11:52:11 -0700
In 9.4 I added support to use a historical snapshot in
ScanPgRelation(), while adding logical decoding. Unfortunately a
conflict with the concurrent removal of SnapshotNow was incorrectly
resolved, leading to an unregistered snapshot being used.
It is not correct to use an unregistered (or non-active) snapshot for
anything non-trivial, because catalog invalidations can cause the
snapshot to be invalidated.
Luckily it seems unlikely to actively cause problems in practice, as
ScanPgRelation() requires that we already have a lock on the relation,
we only look for a single row, and we don't appear to rely on the
result's tid to be correct. It however is clearly wrong and potential
negative consequences would likely be hard to find. So it seems worth
backpatching the fix, even without a concrete hazard.
Discussion: https://postgr.es/m/20200229052459.wzhqnbhrriezg4v2@alap3.anarazel.de
Backpatch: 9.5-
M src/backend/utils/cache/relcache.c
Ensure that plpgsql cleans up cleanly during parallel-worker exit.
commit : deeda011b316c5c27e4f1c926050a81ffe86c9ef
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Thu, 26 Mar 2020 18:06:55 -0400
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Thu, 26 Mar 2020 18:06:55 -0400
plpgsql_xact_cb ought to treat events XACT_EVENT_PARALLEL_COMMIT and
XACT_EVENT_PARALLEL_ABORT like XACT_EVENT_COMMIT and XACT_EVENT_ABORT
respectively, since its goal is to do process-local cleanup. This
oversight caused plpgsql's end-of-transaction cleanup to not get done
in parallel workers. Since a parallel worker will exit just after the
transaction cleanup, the effects of this are limited. I couldn't find
any case in the core code with user-visible effects, but perhaps there
are some in extensions. In any case it's wrong, so let's fix it before
it bites us not after.
In passing, add some comments around the handling of expression
evaluation resources in DO blocks. There's no live bug there, but it's
quite unobvious what's happening; at least I thought so. This isn't
related to the other issue, except that I found both things while poking
at expression-evaluation performance.
Back-patch the plpgsql_xact_cb fix to 9.5 where those event types
were introduced, and the DO-block commentary to v11 where DO blocks
gained the ability to issue COMMIT/ROLLBACK.
Discussion: https://postgr.es/m/10353.1585247879@sss.pgh.pa.us
M src/pl/plpgsql/src/pl_exec.c
M src/pl/plpgsql/src/pl_handler.c
Drop slot's LWLock before returning from SaveSlotToPath()
commit : ba4cc05ce22d8b83194f46085f54c23b7e2f448c
author : Peter Eisentraut <peter@eisentraut.org>
date : Thu, 26 Mar 2020 11:51:39 +0100
committer: Peter Eisentraut <peter@eisentraut.org>
date : Thu, 26 Mar 2020 11:51:39 +0100
When SaveSlotToPath() is called with elevel=LOG, the early exits didn't
release the slot's io_in_progress_lock.
This could result in a walsender being stuck on the lock forever. A
possible way to get into this situation is if the offending code paths
are triggered in a low disk space situation.
Author: Pavan Deolasee <pavan.deolasee@2ndquadrant.com>
Reported-by: Craig Ringer <craig@2ndquadrant.com>
Discussion: https://www.postgresql.org/message-id/flat/56a138c5-de61-f553-7e8f-6789296de785%402ndquadrant.com
M src/backend/replication/slot.c
Add regression tests for constraint errors in partitioned tables.
commit : 58995db07e374c2878960e0516acc49683ea102b
author : Andres Freund <andres@anarazel.de>
date : Mon, 23 Mar 2020 14:24:06 -0700
committer: Andres Freund <andres@anarazel.de>
date : Mon, 23 Mar 2020 14:24:06 -0700
While #16293 only applied to 11 (and 10 to some degree), it seems best
to add tests to all branches with partitioning support.
Reported-By: Daniel WM
Author: Andres Freund
Bug: #16293
Discussion: https://postgr.es/m/16293-26f5777d10143a66@postgresql.org
Backpatch: 10-
M src/test/regress/expected/inherit.out
M src/test/regress/sql/inherit.sql
Fix potential crash after constraint violation errors in partitioned tables.
commit : d35631e37cab25e57f9402fdf208176a1951c87f
author : Andres Freund <andres@anarazel.de>
date : Mon, 23 Mar 2020 13:57:43 -0700
committer: Andres Freund <andres@anarazel.de>
date : Mon, 23 Mar 2020 13:57:43 -0700
During the reporting of constraint violations for partitioned tables,
ExecPartitionCheckEmitError(), ExecConstraints(),
ExecWithCheckOptions() set the slot descriptor of the input slot to
the root partition's tuple desc. That's generally problematic when
the slot could be used by other routines, but can cause crashes after
the introduction of slots with "fixed" tuple descriptors in
ad7dbee368a.
The problem likely escaped detection so far for two reasons: First,
currently the only known way that these routines are used with a
partitioned table that is not "owned" by partitioning code is when
"fast defaults" are used for the child partition. Second, as an error
is raised afterwards, an "external" slot that had its descriptor
changed, is very unlikely to continue being used.
Even though the issue currently is only known to cause a crash for
11 (as that has both fast defaults and "fixed" slot descriptors), it
seems worth applying the fix to 10 too. Potentially changing random
slots is hazardous.
Regression tests will be added in a separate commit, as it seems best
to add them for master and 12 too.
Reported-By: Daniel WM
Author: Andres Freund
Bug: #16293
Discussion: https://postgr.es/m/16293-26f5777d10143a66@postgresql.org
Backpatch: 11, 10 only
M src/backend/executor/execMain.c
Doc: explain that LIKE et al can be used in ANY (sub-select) etc.
commit : 25bf317ccd5aa6050f1f0ac6aa5ed48cb5c6e98c
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Mon, 23 Mar 2020 12:42:15 -0400
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Mon, 23 Mar 2020 12:42:15 -0400
This wasn't stated anywhere, and it's perhaps not that obvious,
since we get questions about it from time to time. Also undocumented
was that the parser actually translates these into operators.
Discussion: https://postgr.es/m/CAFj8pRBkvZ71BqGKZnBBG4=0cKG+s50Dy+DYmrizUKEpAtdc+w@mail.gmail.com
M doc/src/sgml/func.sgml
Fix our getopt_long's behavior for a command line argument of just "-".
commit : aae7e8530dac411fe4d9021e2392917458b37f8d
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Mon, 23 Mar 2020 11:58:01 -0400
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Mon, 23 Mar 2020 11:58:01 -0400
src/port/getopt_long.c failed on such an argument, always seeing it
as an unrecognized switch. This is unhelpful; better is to treat such
an item as a non-switch argument. That behavior is what we find in
GNU's getopt_long(); it's what src/port/getopt.c does; and it is
required by POSIX for getopt(), which getopt_long() ought to be
generally a superset of. Moreover, it's expected by ecpg, which
intends an argument of "-" to mean "read from stdin". So fix it.
Also add some documentation about ecpg's behavior in this area, since
that was miserably underdocumented. I had to reverse-engineer it
from the code.
Per bug #16304 from James Gray. Back-patch to all supported branches,
since this has been broken forever.
Discussion: https://postgr.es/m/16304-c662b00a1322db7f@postgresql.org
M doc/src/sgml/ref/ecpg-ref.sgml
M src/port/getopt_long.c
Doc: Fix type of some storage parameters in CREATE TABLE page
commit : 26a26d9f2b20c2fab60ecb67e2f385abb784cc43
author : Michael Paquier <michael@paquier.xyz>
date : Mon, 23 Mar 2020 13:38:14 +0900
committer: Michael Paquier <michael@paquier.xyz>
date : Mon, 23 Mar 2020 13:38:14 +0900
autovacuum_vacuum_scale_factor and autovacuum_analyze_scale_factor have
been documented as "float4", but "floating type" is used in this case
for GUCs and relation options in the documentation.
Author: Atsushi Torikoshi
Discussion: https://postgr.es/m/CACZ0uYFf_p9BpbjLccx3CA=eM1Hk2Te=ULY4iptGLUhL-JxCPA@mail.gmail.com
Backpatch-through: 9.5
M doc/src/sgml/ref/create_table.sgml
Revert "Skip WAL for new relfilenodes, under wal_level=minimal."
commit : 2fbdebc248ec0694b1399f9bb2e317835baca066
author : Noah Misch <noah@leadboat.com>
date : Sun, 22 Mar 2020 09:24:09 -0700
committer: Noah Misch <noah@leadboat.com>
date : Sun, 22 Mar 2020 09:24:09 -0700
This reverts commit cb2fd7eac285b1b0a24eeb2b8ed4456b66c5a09f. Per
numerous buildfarm members, it was incompatible with parallel query, and
a test case assumed LP64. Back-patch to 9.5 (all supported versions).
Discussion: https://postgr.es/m/20200321224920.GB1763544@rfd.leadboat.com
M doc/src/sgml/config.sgml
M doc/src/sgml/perform.sgml
M src/backend/access/gist/gistbuild.c
M src/backend/access/gist/gistutil.c
M src/backend/access/gist/gistxlog.c
M src/backend/access/heap/heapam.c
M src/backend/access/heap/rewriteheap.c
M src/backend/access/nbtree/nbtsort.c
M src/backend/access/rmgrdesc/gistdesc.c
M src/backend/access/transam/README
M src/backend/access/transam/xact.c
M src/backend/access/transam/xlogutils.c
M src/backend/bootstrap/bootparse.y
M src/backend/catalog/storage.c
M src/backend/commands/cluster.c
M src/backend/commands/copy.c
M src/backend/commands/createas.c
M src/backend/commands/indexcmds.c
M src/backend/commands/matview.c
M src/backend/commands/tablecmds.c
M src/backend/nodes/copyfuncs.c
M src/backend/nodes/equalfuncs.c
M src/backend/nodes/outfuncs.c
M src/backend/parser/gram.y
M src/backend/parser/parse_utilcmd.c
M src/backend/storage/buffer/bufmgr.c
M src/backend/storage/lmgr/lock.c
M src/backend/storage/smgr/md.c
M src/backend/storage/smgr/smgr.c
M src/backend/utils/cache/relcache.c
M src/backend/utils/misc/guc.c
M src/backend/utils/misc/postgresql.conf.sample
M src/include/access/gist_private.h
M src/include/access/gistxlog.h
M src/include/access/heapam.h
M src/include/access/rewriteheap.h
M src/include/catalog/storage.h
M src/include/nodes/parsenodes.h
M src/include/storage/bufmgr.h
M src/include/storage/lock.h
M src/include/storage/smgr.h
M src/include/utils/rel.h
M src/include/utils/relcache.h
D src/test/recovery/t/018_wal_optimize.pl
M src/test/regress/expected/alter_table.out
M src/test/regress/expected/create_table.out
M src/test/regress/sql/alter_table.sql
M src/test/regress/sql/create_table.sql
Skip WAL for new relfilenodes, under wal_level=minimal.
commit : 03b89f1949a99797ed21b0dabdf0aba1bbee8d0b
author : Noah Misch <noah@leadboat.com>
date : Sat, 21 Mar 2020 09:38:26 -0700
committer: Noah Misch <noah@leadboat.com>
date : Sat, 21 Mar 2020 09:38:26 -0700
Until now, only selected bulk operations (e.g. COPY) did this. If a
given relfilenode received both a WAL-skipping COPY and a WAL-logged
operation (e.g. INSERT), recovery could lose tuples from the COPY. See
src/backend/access/transam/README section "Skipping WAL for New
RelFileNode" for the new coding rules. Maintainers of table access
methods should examine that section.
To maintain data durability, just before commit, we choose between an
fsync of the relfilenode and copying its contents to WAL. A new GUC,
wal_skip_threshold, guides that choice. If this change slows a workload
that creates small, permanent relfilenodes under wal_level=minimal, try
adjusting wal_skip_threshold. Users setting a timeout on COMMIT may
need to adjust that timeout, and log_min_duration_statement analysis
will reflect time consumption moving to COMMIT from commands like COPY.
Internally, this requires a reliable determination of whether
RollbackAndReleaseCurrentSubTransaction() would unlink a relation's
current relfilenode. Introduce rd_firstRelfilenodeSubid. Amend the
specification of rd_createSubid such that the field is zero when a new
rel has an old rd_node. Make relcache.c retain entries for certain
dropped relations until end of transaction.
Back-patch to 9.5 (all supported versions). This introduces a new WAL
record type, XLOG_GIST_ASSIGN_LSN, without bumping XLOG_PAGE_MAGIC. As
always, update standby systems before master systems. This changes
sizeof(RelationData) and sizeof(IndexStmt), breaking binary
compatibility for affected extensions. (The most recent commit to
affect the same class of extensions was
089e4d405d0f3b94c74a2c6a54357a84a681754b.)
Kyotaro Horiguchi, reviewed (in earlier, similar versions) by Robert
Haas. Heikki Linnakangas and Michael Paquier implemented earlier
designs that materially clarified the problem. Reviewed, in earlier
designs, by Andrew Dunstan, Andres Freund, Alvaro Herrera, Tom Lane,
Fujii Masao, and Simon Riggs. Reported by Martijn van Oosterhout.
Discussion: https://postgr.es/m/20150702220524.GA9392@svana.org
M doc/src/sgml/config.sgml
M doc/src/sgml/perform.sgml
M src/backend/access/gist/gistbuild.c
M src/backend/access/gist/gistutil.c
M src/backend/access/gist/gistxlog.c
M src/backend/access/heap/heapam.c
M src/backend/access/heap/rewriteheap.c
M src/backend/access/nbtree/nbtsort.c
M src/backend/access/rmgrdesc/gistdesc.c
M src/backend/access/transam/README
M src/backend/access/transam/xact.c
M src/backend/access/transam/xlogutils.c
M src/backend/bootstrap/bootparse.y
M src/backend/catalog/storage.c
M src/backend/commands/cluster.c
M src/backend/commands/copy.c
M src/backend/commands/createas.c
M src/backend/commands/indexcmds.c
M src/backend/commands/matview.c
M src/backend/commands/tablecmds.c
M src/backend/nodes/copyfuncs.c
M src/backend/nodes/equalfuncs.c
M src/backend/nodes/outfuncs.c
M src/backend/parser/gram.y
M src/backend/parser/parse_utilcmd.c
M src/backend/storage/buffer/bufmgr.c
M src/backend/storage/lmgr/lock.c
M src/backend/storage/smgr/md.c
M src/backend/storage/smgr/smgr.c
M src/backend/utils/cache/relcache.c
M src/backend/utils/misc/guc.c
M src/backend/utils/misc/postgresql.conf.sample
M src/include/access/gist_private.h
M src/include/access/gistxlog.h
M src/include/access/heapam.h
M src/include/access/rewriteheap.h
M src/include/catalog/storage.h
M src/include/nodes/parsenodes.h
M src/include/storage/bufmgr.h
M src/include/storage/lock.h
M src/include/storage/smgr.h
M src/include/utils/rel.h
M src/include/utils/relcache.h
A src/test/recovery/t/018_wal_optimize.pl
M src/test/regress/expected/alter_table.out
M src/test/regress/expected/create_table.out
M src/test/regress/sql/alter_table.sql
M src/test/regress/sql/create_table.sql
Back-patch log_newpage_range().
commit : ae86e46c3b7b90903d89b65385e2b77d2c1cf63e
author : Noah Misch <noah@leadboat.com>
date : Sat, 21 Mar 2020 09:38:33 -0700
committer: Noah Misch <noah@leadboat.com>
date : Sat, 21 Mar 2020 09:38:33 -0700
Back-patch a subset of commit 9155580fd5fc2a0cbb23376dfca7cd21f59c2c7b
to v11, v10, 9.6, and 9.5. Include the latest repairs to this function.
Use a new XLOG_FPI_MULTI value instead of reusing XLOG_FPI. That way,
if an older server reads WAL from this function, that server will PANIC
instead of applying just one page of the record. The next commit adds a
call to this function.
Discussion: https://postgr.es/m/20200304.162919.898938381201316571.horikyota.ntt@gmail.com
M src/backend/access/rmgrdesc/xlogdesc.c
M src/backend/access/transam/xlog.c
M src/backend/access/transam/xloginsert.c
M src/backend/replication/logical/decode.c
M src/include/access/xloginsert.h
M src/include/catalog/pg_control.h
During heap rebuild, lock any TOAST index until end of transaction.
commit : 4433c6e8c0a5d0891c9bb52d14e73464086c0375
author : Noah Misch <noah@leadboat.com>
date : Sat, 21 Mar 2020 09:38:26 -0700
committer: Noah Misch <noah@leadboat.com>
date : Sat, 21 Mar 2020 09:38:26 -0700
swap_relation_files() calls toast_get_valid_index() to find and lock
this index, just before swapping with the rebuilt TOAST index. The
latter function releases the lock before returning. Potential for
mischief is low; a concurrent session can issue ALTER INDEX ... SET
(fillfactor = ...), which is not alarming. Nonetheless, changing
pg_class.relfilenode without a lock is unconventional. Back-patch to
9.5 (all supported versions), because another fix needs this.
Discussion: https://postgr.es/m/20191226001521.GA1772687@rfd.leadboat.com
M src/backend/access/heap/tuptoaster.c
M src/backend/commands/cluster.c
Fix cosmetic blemishes involving rd_createSubid.
commit : 03e99a674979b6143e0917243fe9517fede278a2
author : Noah Misch <noah@leadboat.com>
date : Sat, 21 Mar 2020 09:38:26 -0700
committer: Noah Misch <noah@leadboat.com>
date : Sat, 21 Mar 2020 09:38:26 -0700
Remove an obsolete comment from AtEOXact_cleanup(). Restore formatting
of a comment in struct RelationData, mangled by the pgindent run in
commit 9af4159fce6654aa0e081b00d02bca40b978745c. Back-patch to 9.5 (all
supported versions), because another fix stacks on this.
M src/backend/utils/cache/relcache.c
M src/include/utils/rel.h
docs: use alias in WHERE clause of full text search example
commit : 0c96744a8769c4651c8ecce91762b6c606bb01ae
author : Bruce Momjian <bruce@momjian.us>
date : Fri, 20 Mar 2020 20:19:32 -0400
committer: Bruce Momjian <bruce@momjian.us>
date : Fri, 20 Mar 2020 20:19:32 -0400
The current doc query specified an alias in the FROM clause and used in
it the target list, but not in the WHERE clause.
Reported-by: axykon@gmail.com
Discussion: https://postgr.es/m/158316348159.30450.16075357948244298217@wrigleys.postgresql.org
Backpatch-through: 9.5
M doc/src/sgml/textsearch.sgml
Turn off deprecated bison warnings under MSVC
commit : e8a6391fc1837416b7251f62485323af01789559
author : Andrew Dunstan <andrew@dunslane.net>
date : Fri, 20 Mar 2020 13:55:15 -0400
committer: Andrew Dunstan <andrew@dunslane.net>
date : Fri, 20 Mar 2020 13:55:15 -0400
These are disabled by the configure code, so this is just fixing an
inconsistency in the MSVC code.
Backpatch to all live branches.
M src/tools/msvc/pgbison.pl
pg_upgrade: make get_major_server_version() err msg consistent
commit : 6802942fa2a638c6f5614e56546af276308cf4bd
author : Bruce Momjian <bruce@momjian.us>
date : Thu, 19 Mar 2020 15:20:55 -0400
committer: Bruce Momjian <bruce@momjian.us>
date : Thu, 19 Mar 2020 15:20:55 -0400
This patch fixes the error message in get_major_server_version() to be
"could not parse version file", and uses the full file path name, rather
than just the data directory path.
Also, commit 4109bb5de4 added the cause of the failure to the "could
not open" error message, and improved quoting. This patch backpatches
the "could not open" cause to PG 12, where it was first widely used, and
backpatches the quoting fix in that patch to all supported releases.
Reported-by: Tom Lane
Discussion: https://postgr.es/m/87pne2w98h.fsf@wibble.ilmari.org
Author: Dagfinn Ilmari Mannsåker
Backpatch-through: 9.5
M src/bin/pg_upgrade/server.c
Correct the descriptions of recovery-related wait events in docs.
commit : 375aa3fc2cb21132db6790305b433d81061367e2
author : Fujii Masao <fujii@postgresql.org>
date : Wed, 18 Mar 2020 23:07:17 +0900
committer: Fujii Masao <fujii@postgresql.org>
date : Wed, 18 Mar 2020 23:07:17 +0900
This commit corrects the descriptions of RecoveryWalAll and RecoveryWalStream
wait events in the documentation.
Back-patch to v10 where those wait events were added.
Author: Fujii Masao
Reviewed-by: Kyotaro Horiguchi, Atsushi Torikoshi
Discussion: https://postgr.es/m/124997ee-096a-5d09-d8da-2c7a57d0816e@oss.nttdata.com
M doc/src/sgml/monitoring.sgml
Add missing errcode() in a few ereport calls.
commit : 18c41cb6b7140a0d360900c10ac23072579194a1
author : Amit Kapila <akapila@postgresql.org>
date : Wed, 18 Mar 2020 09:37:08 +0530
committer: Amit Kapila <akapila@postgresql.org>
date : Wed, 18 Mar 2020 09:37:08 +0530
This will allow to specifying SQLSTATE error code for the errors in the
missing places.
Reported-by: Sawada Masahiko
Author: Sawada Masahiko
Backpatch-through: 9.5
Discussion: https://postgr.es/m/CA+fd4k6N8EjNvZpM8nme+y+05mz-SM8Z_BgkixzkA34R+ej0Kw@mail.gmail.com
M contrib/adminpack/adminpack.c
M src/backend/storage/page/bufpage.c
Doc: clarify behavior of "anyrange" pseudo-type.
commit : 974c8ea0afe35a55c1b9ffb9f2090058b9f356dd
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Tue, 17 Mar 2020 15:05:17 -0400
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Tue, 17 Mar 2020 15:05:17 -0400
I noticed that we completely failed to document the restriction
that an "anyrange" result type has to be inferred from an "anyrange"
input. The docs also were less clear than they could be about the
relationship between "anyrange" and "anyarray".
It's been like this all along, so back-patch.
M doc/src/sgml/extend.sgml
Use pkg-config, if available, to locate libxml2 during configure.
commit : 9af2f7dc9603bf1fd1f80a6326cc80e83acd3076
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Tue, 17 Mar 2020 12:09:27 -0400
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Tue, 17 Mar 2020 12:09:27 -0400
If pkg-config is installed and knows about libxml2, use its information
rather than asking xml2-config. Otherwise proceed as before. This
patch allows "configure --with-libxml" to succeed on platforms that
have pkg-config but not xml2-config, which is likely to soon become
a typical situation.
The old mechanism can be forced by setting XML2_CONFIG explicitly
(hence, build processes that were already doing so will certainly
not need adjustment). Also, it's now possible to set XML2_CFLAGS
and XML2_LIBS explicitly to override both programs.
There is a small risk of this breaking existing build processes,
if there are multiple libxml2 installations on the machine and
pkg-config disagrees with xml2-config about which to use. The
only case where that seems really likely is if a builder has tried
to select a non-default xml2-config by putting it early in his PATH
rather than setting XML2_CONFIG. Plan to warn against that in the
minor release notes.
Back-patch to v10; before that we had no pkg-config infrastructure,
and it doesn't seem worth adding it for this.
Hugh McMaster and Tom Lane; Peter Eisentraut also made an earlier
attempt at this, from which I lifted most of the docs changes.
Discussion: https://postgr.es/m/CAN9BcdvfUwc9Yx5015bLH2TOiQ-M+t_NADBSPhMF7dZ=pLa_iw@mail.gmail.com
M configure
M configure.in
M doc/src/sgml/installation.sgml
Avoid holding a directory FD open across assorted SRF calls.
commit : 819d5525744bff600b6073804a7a5eb7a9342a8b
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Mon, 16 Mar 2020 21:05:29 -0400
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Mon, 16 Mar 2020 21:05:29 -0400
This extends the fixes made in commit 085b6b667 to other SRFs with the
same bug, namely pg_logdir_ls(), pgrowlocks(), pg_timezone_names(),
pg_ls_dir(), and pg_tablespace_databases().
Also adjust various comments and documentation to warn against
expecting to clean up resources during a ValuePerCall SRF's final
call.
Back-patch to all supported branches, since these functions were
all born broken.
Justin Pryzby, with cosmetic tweaks by me
Discussion: https://postgr.es/m/20200308173103.GC1357@telsasoft.com
M contrib/adminpack/adminpack.c
M contrib/pgrowlocks/pgrowlocks.c
M doc/src/sgml/xfunc.sgml
M src/backend/utils/adt/datetime.c
M src/backend/utils/adt/genfile.c
M src/backend/utils/adt/misc.c
M src/backend/utils/fmgr/README
M src/include/funcapi.h
M src/test/regress/expected/misc_functions.out
M src/test/regress/sql/misc_functions.sql
Document pg_ls_*dir hiding of directories and special files
commit : a6b5ddf64ce24532c69a24f1b3e13dbaa81ccbba
author : Alvaro Herrera <alvherre@alvh.no-ip.org>
date : Mon, 16 Mar 2020 19:12:14 -0300
committer: Alvaro Herrera <alvherre@alvh.no-ip.org>
date : Mon, 16 Mar 2020 19:12:14 -0300
It's strange that a directory-listing function does not list all entries
in a directory, so let's at least document it. This involves
pg_ls_logdir
pg_ls_waldir
pg_ls_archive_statusdir
pg_ls_tmpdir
Backpatch as far back as it applies cleanly (and as far as as each
function exists). REL_10_STABLE uses different wording, but hopefully
people are not reading docs so old to write new apps anyway.
Author: Justin Pryzby <pryzby@telsasoft.com>
Discussion: https://postgr.es/m/20200305161838.GJ684@telsasoft.com
M doc/src/sgml/func.sgml
Plug memory leak
commit : 55978e28cd50e7db02289e1dca93a9284c7c2b05
author : Alvaro Herrera <alvherre@alvh.no-ip.org>
date : Mon, 16 Mar 2020 16:27:13 -0300
committer: Alvaro Herrera <alvherre@alvh.no-ip.org>
date : Mon, 16 Mar 2020 16:27:13 -0300
Introduced by b08dee24a557. Noted by Coverity.
M src/bin/pg_dump/pg_dump.c
Restructure polymorphic-type resolution in funcapi.c.
commit : 540ef37cc00d5b4ad3ae2bde8410bcb572bd174d
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Sat, 14 Mar 2020 14:42:22 -0400
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Sat, 14 Mar 2020 14:42:22 -0400
resolve_polymorphic_tupdesc() and resolve_polymorphic_argtypes() failed to
cover the case of having to resolve anyarray given only an anyrange input.
The bug was masked if anyelement was also used (as either input or
output), which probably helps account for our not having noticed.
While looking at this I noticed that resolve_generic_type() would produce
the wrong answer if asked to make that same resolution. ISTM that
resolve_generic_type() is confusingly defined and overly complex, so
rather than fix it, let's just make funcapi.c do the specific lookups
it requires for itself.
With this change, resolve_generic_type() is not used anywhere, so remove
it in HEAD. In the back branches, leave it alone (complete with bug)
just in case any external code is using it.
While we're here, make some other refactoring adjustments in funcapi.c
with an eye to upcoming future expansion of the set of polymorphic types:
* Simplify quick-exit tests by adding an overall have_polymorphic_result
flag. This is about a wash now but will be a win when there are more
flags.
* Reduce duplication of code between resolve_polymorphic_tupdesc() and
resolve_polymorphic_argtypes().
* Don't bother to validate correct matching of anynonarray or anyenum;
the parser should have done that, and even if it didn't, just doing
"return false" here would lead to a very confusing, off-point error
message. (Really, "return false" in these two functions should only
occur if the call_expr isn't supplied or we can't obtain data type
info from it.)
* For the same reason, throw an elog rather than "return false" if
we fail to resolve a polymorphic type.
The bug's been there since we added anyrange, so back-patch to
all supported branches.
Discussion: https://postgr.es/m/6093.1584202130@sss.pgh.pa.us
M src/backend/utils/fmgr/funcapi.c
M src/test/regress/expected/rangetypes.out
M src/test/regress/sql/rangetypes.sql
Doc: fix mistaken reference to "PG_ARGNULL_xxx()" macro.
commit : 7e32aaab589a8927c22d3b83d55fc0e77424b348
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Fri, 13 Mar 2020 12:49:10 -0400
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Fri, 13 Mar 2020 12:49:10 -0400
This should of course be just "PG_ARGISNULL()".
Also reorder a couple of paras to make the discussion of PG_ARGISNULL
less disjointed.
Back-patch to v10 where the error was introduced.
Laurenz Albe and Tom Lane, per an anonymous docs comment
Discussion: https://postgr.es/m/158399487096.5708.10696365251766477013@wrigleys.postgresql.org
M doc/src/sgml/xfunc.sgml
Preserve replica identity index across ALTER TABLE rewrite
commit : 15cbbf81a58fd04479c0e5ff134838492473e935
author : Peter Eisentraut <peter@eisentraut.org>
date : Fri, 13 Mar 2020 11:28:11 +0100
committer: Peter Eisentraut <peter@eisentraut.org>
date : Fri, 13 Mar 2020 11:28:11 +0100
If an index was explicitly set as replica identity index, this setting
was lost when a table was rewritten by ALTER TABLE. Because this
setting is part of pg_index but actually controlled by ALTER
TABLE (not part of CREATE INDEX, say), we have to do some extra work
to restore it.
Based-on-patch-by: Quan Zongliang <quanzongliang@gmail.com>
Reviewed-by: Euler Taveira <euler.taveira@2ndquadrant.com>
Discussion: https://www.postgresql.org/message-id/flat/c70fcab2-4866-0d9f-1d01-e75e189db342@gmail.com
M src/backend/commands/tablecmds.c
M src/backend/utils/cache/lsyscache.c
M src/include/utils/lsyscache.h
M src/test/regress/expected/replica_identity.out
M src/test/regress/sql/replica_identity.sql
Fix nextXid tracking bug on standbys (9.5-11 only).
commit : a493f933422c97f40584efbd07c3e6884ed3ace3
author : Thomas Munro <tmunro@postgresql.org>
date : Thu, 12 Mar 2020 18:06:54 +1300
committer: Thomas Munro <tmunro@postgresql.org>
date : Thu, 12 Mar 2020 18:06:54 +1300
RecordKnownAssignedTransactionIds() should never move
nextXid backwards. Before this commit, that could happen
if some other code path had advanced it without advancing
latestObservedXid.
One consequence is that a well timed XLOG_CHECKPOINT_ONLINE
could cause hot standby feedback messages to get confused
and report an xmin from a future epoch, potentially allowing
vacuum to run too soon on the primary.
Repair, by making sure RecordKnownAssignedTransactionIds()
can only move nextXid forwards.
In release 12 and master, this was already done by commit
2fc7af5e, which consolidated similar code and straightened
out this bug. Back-patch to supported releases before that.
Author: Eka Palamadai <ekanatha@amazon.com>
Discussion: https://postgr.es/m/98BB4805-D0A2-48E1-96F4-15014313EADC@amazon.com
M src/backend/storage/ipc/procarray.c
Fix test case instability introduced in 085b6b667.
commit : 13f353b0e0775642c212ac557b371eefa171d179
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Wed, 11 Mar 2020 18:23:57 -0400
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Wed, 11 Mar 2020 18:23:57 -0400
I forgot that the WAL directory might hold other files besides WAL
segments, notably including new segments still being filled.
That means a blind test for the first file's size being 16MB can
fail. Restrict based on file name length to make it more robust.
Per buildfarm.
M src/test/regress/expected/misc_functions.out
M src/test/regress/sql/misc_functions.sql
Paper over bt_metap() oldest_xact bug in backbranches.
commit : c788115b5eb50d666023aa6f6e7faee21288401c
author : Peter Geoghegan <pg@bowt.ie>
date : Wed, 11 Mar 2020 14:15:00 -0700
committer: Peter Geoghegan <pg@bowt.ie>
date : Wed, 11 Mar 2020 14:15:00 -0700
The data types that contrib/pageinspect's bt_metap() function were
declared to return as OUT arguments were wrong in some cases. In
particular, the oldest_xact column (a TransactionId/xid field) was
declared integer/int4 within the pageinspect extension's sql file. This
led to errors when an oldest_xact value that exceeded 2^31-1 was
encountered.
We cannot fix the declaration on Postgres 11 or 12. All we can do is
ameliorate the problem. Use "%d" instead of "%u" to format the output
of the oldest_xact value. This makes the C code match the declaration,
suppressing unhelpful error messages that might otherwise make
bt_metap() totally unusable. A bogus negative oldest_xact value will be
displayed instead of raising an error.
This commit addresses the same issue as master branch commit 691e8b2e18,
which actually fixed the problem. Backpatch to the 11 and 12 branches
only, since they are the only branches (other than master) that have
oldest_xact. All of the other problematic columns already display bogus
output for out of range values.
Reported-By: Victor Yegorov
Bug: #16285
Discussion: https://postgr.es/m/20200309223557.aip5n6ewln4ixbbi@alap3.anarazel.de
Backpatch: 11 and 12 only
M contrib/pageinspect/btreefuncs.c
Add pg_dump support for ALTER obj DEPENDS ON EXTENSION
commit : e70187c9b47cc1035a42196e62c4b5958f122a77
author : Alvaro Herrera <alvherre@alvh.no-ip.org>
date : Wed, 11 Mar 2020 16:54:54 -0300
committer: Alvaro Herrera <alvherre@alvh.no-ip.org>
date : Wed, 11 Mar 2020 16:54:54 -0300
pg_dump is oblivious to this kind of dependency, so they're lost on
dump/restores (and pg_upgrade). Have pg_dump emit ALTER lines so that
they're preserved. Add some pg_dump tests for the whole thing, also.
Reviewed-by: Tom Lane (offlist)
Reviewed-by: Ibrar Ahmed
Reviewed-by: Ahsan Hadi (who also reviewed commit 899a04f5ed61)
Discussion: https://postgr.es/m/20200217225333.GA30974@alvherre.pgsql
M src/bin/pg_dump/common.c
M src/bin/pg_dump/pg_dump.c
M src/bin/pg_dump/pg_dump.h
M src/test/modules/test_pg_dump/t/001_base.pl
Avoid holding a directory FD open across pg_ls_dir_files() calls.
commit : 63b51dfec18eb3c280adfa0f6e970946c441f574
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Wed, 11 Mar 2020 15:27:59 -0400
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Wed, 11 Mar 2020 15:27:59 -0400
This coding technique is undesirable because (a) it leaks the FD for
the rest of the transaction if the SRF is not run to completion, and
(b) allocated FDs are a scarce resource, but multiple interleaved
uses of the relevant functions could eat many such FDs.
In v11 and later, a query such as "SELECT pg_ls_waldir() LIMIT 1"
yields a warning about the leaked FD, and the only reason there's
no warning in earlier branches is that fd.c didn't whine about such
leaks before commit 9cb7db3f0. Even disregarding the warning, it
wouldn't be too hard to run a backend out of FDs with careless use
of these SQL functions.
Hence, rewrite the function so that it reads the directory within
a single call, returning the results as a tuplestore rather than
via value-per-call mode.
There are half a dozen other built-in SRFs with similar problems,
but let's fix this one to start with, just to see if the buildfarm
finds anything wrong with the code.
In passing, fix bogus error report for stat() failure: it was
whining about the directory when it should be fingering the
individual file. Doubtless a copy-and-paste error.
Back-patch to v10 where this function was added.
Justin Pryzby, with cosmetic tweaks and test cases by me
Discussion: https://postgr.es/m/20200308173103.GC1357@telsasoft.com
M src/backend/utils/adt/genfile.c
M src/test/regress/expected/misc_functions.out
M src/test/regress/sql/misc_functions.sql
Avoid duplicates in ALTER ... DEPENDS ON EXTENSION
commit : 7c094a11c70d4790ae4067023806a026c6fd2fe1
author : Alvaro Herrera <alvherre@alvh.no-ip.org>
date : Wed, 11 Mar 2020 11:04:59 -0300
committer: Alvaro Herrera <alvherre@alvh.no-ip.org>
date : Wed, 11 Mar 2020 11:04:59 -0300
If the command is attempted for an extension that the object already
depends on, silently do nothing.
In particular, this means that if a database containing multiple such
entries is dumped, the restore will silently do the right thing and
record just the first one. (At least, in a world where pg_dump does
dump such entries -- which it doesn't currently, but it will.)
Backpatch to 9.6, where this kind of dependency was introduced.
Reviewed-by: Ibrar Ahmed, Tom Lane (offlist)
Discussion: https://postgr.es/m/20200217225333.GA30974@alvherre.pgsql
M src/backend/catalog/pg_depend.c
M src/backend/commands/alter.c
M src/include/catalog/dependency.h
M src/test/modules/test_extensions/expected/test_extdepend.out
M src/test/modules/test_extensions/sql/test_extdepend.sql
Fix pg_dump/pg_restore to restore event triggers later.
commit : f5d49f22653e6af61eee027153dcfd13e0256d85
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Mon, 9 Mar 2020 14:58:11 -0400
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Mon, 9 Mar 2020 14:58:11 -0400
Previously, event triggers were restored just after regular triggers
(and FK constraints, which are basically triggers). This is risky
since an event trigger, once installed, could interfere with subsequent
restore commands. Worse, because event triggers don't have any
particular dependencies on any post-data objects, a parallel restore
would consider them eligible to be restored the moment the post-data
phase starts, allowing them to also interfere with restoration of a
whole bunch of objects that would have been restored before them in
a serial restore. There's no way to completely remove the risk of a
misguided event trigger breaking the restore, since if nothing else
it could break other event triggers. But we can certainly push them
to later in the process to minimize the hazard.
To fix, tweak the RestorePass mechanism introduced by commit 3eb9a5e7c
so that event triggers are handled as part of the post-ACL processing
pass (renaming the "REFRESH" pass to "POST_ACL" to reflect its more
general use). This will cause them to restore after everything except
matview refreshes, which seems OK since matview refreshes really ought
to run in the post-restore state of the database. In a parallel
restore, event triggers and matview refreshes might be intermixed,
but that seems all right as well.
Also update the code and comments in pg_dump_sort.c so that its idea
of how things are sorted agrees with what actually happens due to
the RestorePass mechanism. This is mostly cosmetic: it'll affect the
order of objects in a dump's TOC, but not the actual restore order.
But not changing that would be quite confusing to somebody reading
the code.
Back-patch to all supported branches.
Fabrízio de Royes Mello, tweaked a bit by me
Discussion: https://postgr.es/m/CAFcNs+ow1hmFox8P--3GSdtwz-S3Binb6ZmoP6Vk+Xg=K6eZNA@mail.gmail.com
M src/bin/pg_dump/pg_backup_archiver.c
M src/bin/pg_dump/pg_backup_archiver.h
M src/bin/pg_dump/pg_dump_sort.c
Fix bug that causes to report waiting in PS display twice, in hot standby.
commit : e54183cb0bfda14b89f9e01caaec089aec8a29e8
author : Fujii Masao <fujii@postgresql.org>
date : Tue, 10 Mar 2020 00:14:43 +0900
committer: Fujii Masao <fujii@postgresql.org>
date : Tue, 10 Mar 2020 00:14:43 +0900
Previously "waiting" could appear twice via PS in case of lock conflict
in hot standby mode. Specifically this issue happend when the delay
in WAL application determined by max_standby_archive_delay and
max_standby_streaming_delay had passed but it took more than 500 msec
to cancel all the conflicting transactions. Especially we can observe this
easily by setting those delay parameters to -1.
The cause of this issue was that WaitOnLock() and
ResolveRecoveryConflictWithVirtualXIDs() added "waiting" to
the process title in that case. This commit prevents
ResolveRecoveryConflictWithVirtualXIDs() from reporting waiting
in case of lock conflict, to fix the bug.
Back-patch to all back branches.
Author: Masahiko Sawada
Reviewed-by: Fujii Masao
Discussion: https://postgr.es/m/CA+fd4k4mXWTwfQLS3RPwGr4xnfAEs1ysFfgYHvmmoUgv6Zxvmg@mail.gmail.com
M src/backend/storage/ipc/standby.c
Avoid assertion failure with targeted recovery in standby mode.
commit : 500fe161edd0eee20fb12365609f0db215db34f7
author : Fujii Masao <fujii@postgresql.org>
date : Mon, 9 Mar 2020 15:31:31 +0900
committer: Fujii Masao <fujii@postgresql.org>
date : Mon, 9 Mar 2020 15:31:31 +0900
At the end of recovery, standby mode is turned off to re-fetch the last
valid record from archive or pg_wal. Previously, if recovery target was
reached and standby mode was turned off while the current WAL source
was stream, recovery could try to retrieve WAL file containing the last
valid record unexpectedly from stream even though not in standby mode.
This caused an assertion failure. That is, the assertion test confirms that
WAL file should not be retrieved from stream if standby mode is not true.
This commit moves back the current WAL source to archive if it's stream
even though not in standby mode, to avoid that assertion failure.
This issue doesn't cause the server to crash when built with assertion
disabled. In this case, the attempt to retrieve WAL file from stream not
in standby mode just fails. And then recovery tries to retrieve WAL file
from archive or pg_wal.
Back-patch to all supported branches.
Author: Kyotaro Horiguchi
Reviewed-by: Fujii Masao
Discussion: https://postgr.es/m/20200227.124830.2197604521555566121.horikyota.ntt@gmail.com
M src/backend/access/transam/xlog.c
Fix typo
commit : 53a039da62bb967c60522572e1e69e25cc94d6ed
author : Peter Eisentraut <peter@eisentraut.org>
date : Sat, 7 Mar 2020 08:51:59 +0100
committer: Peter Eisentraut <peter@eisentraut.org>
date : Sat, 7 Mar 2020 08:51:59 +0100
M src/backend/catalog/objectaddress.c
Fix assertion failure with ALTER TABLE ATTACH PARTITION and indexes
commit : 75839fcf829f25f6b1c78416a6161617285fe201
author : Michael Paquier <michael@paquier.xyz>
date : Tue, 3 Mar 2020 13:56:34 +0900
committer: Michael Paquier <michael@paquier.xyz>
date : Tue, 3 Mar 2020 13:56:34 +0900
Using ALTER TABLE ATTACH PARTITION causes an assertion failure when
attempting to work on a partitioned index, because partitioned indexes
cannot have partition bounds.
The grammar of ALTER TABLE ATTACH PARTITION requires partition bounds,
but not ALTER INDEX, so mixing ALTER TABLE with partitioned indexes is
confusing. Hence, on HEAD, prevent ALTER TABLE to attach a partition if
the relation involved is a partitioned index. On back-branches, as
applications may rely on the existing behavior, just remove the
culprit assertion.
Reported-by: Alexander Lakhin
Author: Amit Langote, Michael Paquier
Discussion: https://postgr.es/m/16276-5cd1dcc8fb8be7b5@postgresql.org
Backpatch-through: 11
M src/backend/parser/parse_utilcmd.c
M src/test/regress/expected/indexing.out
M src/test/regress/sql/indexing.sql
Fix the name of the first WAL segment file, in docs.
commit : 53fc42c6d13c72653b929c968bc1e8de6263508a
author : Fujii Masao <fujii@postgresql.org>
date : Tue, 3 Mar 2020 12:22:04 +0900
committer: Fujii Masao <fujii@postgresql.org>
date : Tue, 3 Mar 2020 12:22:04 +0900
Previously the documentation explains that WAL segment files
start at 000000010000000000000000. But the first WAL segment file
that initdb creates is 000000010000000000000001 not
000000010000000000000000. This change was caused by old
commit 8c843fff2d, but the documentation had not been updated
a long time.
Back-patch to all supported branches.
Author: Fujii Masao
Reviewed-by: David Zhang
Discussion: https://postgr.es/m/CAHGQGwHOmGe2OqGOmp8cOfNVDivq7dbV74L5nUGr+3eVd2CU2Q@mail.gmail.com
M doc/src/sgml/wal.sgml
Correctly re-use hash tables in buildSubPlanHash().
commit : 9eb6b652a46d0b13658be80013f5b893ac1d7894
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Sat, 29 Feb 2020 13:48:10 -0500
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Sat, 29 Feb 2020 13:48:10 -0500
Commit 356687bd8 omitted to remove leftover code for destroying
a hashed subplan's hash tables, with the result that the tables
were always rebuilt not reused; this leads to severe memory
leakage if a hashed subplan is re-executed enough times.
Moreover, the code for reusing the hashnulls table had a typo
that would have made it do the wrong thing if it were reached.
Looking at the code coverage report shows severe under-coverage
of the potential callers of ResetTupleHashTable, so add some test
cases that exercise them.
Andreas Karlsson and Tom Lane, per reports from Ranier Vilela
and Justin Pryzby.
Backpatch to v11, as the faulty commit was.
Discussion: https://postgr.es/m/edb62547-c453-c35b-3ed6-a069e4d6b937@proxel.se
Discussion: https://postgr.es/m/CAEudQAo=DCebm1RXtig9OH+QivpS97sMkikt0A9qHmMUs+g6ZA@mail.gmail.com
Discussion: https://postgr.es/m/20200210032547.GA1412@telsasoft.com
M src/backend/executor/nodeSubplan.c
M src/test/regress/expected/subselect.out
M src/test/regress/sql/subselect.sql
Avoid failure if autovacuum tries to access a just-dropped temp namespace.
commit : 7ea20a2bc6bdd2dccc8e63a03fcd0a002ed447ab
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Fri, 28 Feb 2020 20:28:34 -0500
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Fri, 28 Feb 2020 20:28:34 -0500
Such an access became possible when commit 246a6c8f7 added more
aggressive cleanup of orphaned temp relations by autovacuum.
Since autovacuum's snapshot might be slightly stale, it could
attempt to access an already-dropped temp namespace, resulting in
an assertion failure or null-pointer dereference. (In practice,
since we don't drop temp namespaces automatically but merely
recycle them, this situation could only arise if a superuser does
a manual drop of a temp namespace. Still, that should be allowed.)
The core of the bug, IMO, is that isTempNamespaceInUse and its callers
failed to think hard about whether to treat "temp namespace isn't there"
differently from "temp namespace isn't in use". In hopes of forestalling
future mistakes of the same ilk, replace that function with a new one
checkTempNamespaceStatus, which makes the same tests but returns a
three-way enum rather than just a bool. isTempNamespaceInUse is gone
entirely in HEAD; but just in case some external code is relying on it,
keep it in the back branches, as a bug-compatible wrapper around the
new function.
Per report originally from Prabhat Kumar Sahu, investigated by Mahendra
Singh and Michael Paquier; the final form of the patch is my fault.
This replaces the failed fix attempt in a052f6cbb.
Backpatch as far as v11, as 246a6c8f7 was.
Discussion: https://postgr.es/m/CAKYtNAr9Zq=1-ww4etHo-VCC-k120YxZy5OS01VkaLPaDbv2tg@mail.gmail.com
M src/backend/catalog/namespace.c
M src/backend/postmaster/autovacuum.c
M src/include/catalog/namespace.h
Doc: correct thinko in pg_buffercache documentation.
commit : 880643b9cd1b87c1afb376a9f9a6f5a1df7aa644
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Fri, 28 Feb 2020 11:29:59 -0500
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Fri, 28 Feb 2020 11:29:59 -0500
Access to this module is granted to the pg_monitor role, not
pg_read_all_stats. (Given the view's performance impact,
it seems wise to be restrictive, so I think this was the
correct decision --- and anyway it was clearly intentional.)
Per bug #16279 from Philip Semanchuk.
Discussion: https://postgr.es/m/16279-fcaac33c68aab0ab@postgresql.org
M doc/src/sgml/pgbuffercache.sgml
Remove TAP test for createdb --lc-ctype
commit : 8e076f4f9ae3c19c8142e88ca1b6b1d25899dc64
author : Michael Paquier <michael@paquier.xyz>
date : Thu, 27 Feb 2020 21:58:50 +0900
committer: Michael Paquier <michael@paquier.xyz>
date : Thu, 27 Feb 2020 21:58:50 +0900
OpenBSD falls back to "C" when using an incorrect input with setlocale()
and LC_CTYPE, causing this test, introduced by 008cf04, to fail. This
removes the culprit test to avoid the portability issue.
Per report from Robert Haas, via buildfarm member curculio.
Discussion: https://postgr.es/m/CA+TgmoZ6ddh3mHD9gU8DvNYoFmuJaYYn1+4AvZNp25vTdRwCAQ@mail.gmail.com
Backpatch-through: 11
M src/bin/scripts/t/020_createdb.pl
Skip foreign tablespaces when running pg_checksums/pg_verify_checksums
commit : 8f9aba1874eccae860d5a6ced9b2899b2f7895b4
author : Michael Paquier <michael@paquier.xyz>
date : Thu, 27 Feb 2020 15:31:52 +0900
committer: Michael Paquier <michael@paquier.xyz>
date : Thu, 27 Feb 2020 15:31:52 +0900
Attempting to use pg_checksums (pg_verify_checksums in 11) on a data
folder which includes tablespace paths used across multiple major
versions would cause pg_checksums to scan all directories present in
pg_tblspc, and not only marked with TABLESPACE_VERSION_DIRECTORY. This
could lead to failures when for example running sanity checks on an
upgraded instance with --check. Even worse, it was possible to rewrite
on-disk pages with --enable for a cluster potentially online.
This commit makes pg_checksums skip any directories not named
TABLESPACE_VERSION_DIRECTORY, similarly to what is done for base
backups.
Reported-by: Michael Banck
Author: Michael Banck, Bernd Helmle
Discussion: https://postgr.es/m/62031974fd8e941dd8351fbc8c7eff60d59c5338.camel@credativ.de
backpatch-through: 11
M src/bin/pg_verify_checksums/pg_verify_checksums.c
createdb: Fix quoting of --encoding, --lc-ctype and --lc-collate
commit : 83bd732eb2c83a26db9eefb4595615fa289620a8
author : Michael Paquier <michael@paquier.xyz>
date : Thu, 27 Feb 2020 11:21:07 +0900
committer: Michael Paquier <michael@paquier.xyz>
date : Thu, 27 Feb 2020 11:21:07 +0900
The original coding failed to properly quote those arguments, leading to
failures when using quotes in the values used. As the quoting can be
encoding-sensitive, the connection to the backend needs to be taken
before applying the correct quoting.
Author: Michael Paquier
Reviewed-by: Daniel Gustafsson
Discussion: https://postgr.es/m/20200214041004.GB1998@paquier.xyz
Backpatch-through: 9.5
M src/bin/scripts/createdb.c
M src/bin/scripts/t/020_createdb.pl
Fix docs regarding AFTER triggers on partitioned tables
commit : 143152439dc9482b1ae983f2819453e7300eca7f
author : Alvaro Herrera <alvherre@alvh.no-ip.org>
date : Wed, 26 Feb 2020 19:57:14 -0300
committer: Alvaro Herrera <alvherre@alvh.no-ip.org>
date : Wed, 26 Feb 2020 19:57:14 -0300
In commit 86f575948c77 I forgot to update the trigger.sgml paragraph
that needs to explain that AFTER triggers are allowed in partitioned
tables. Do so now.
Discussion: https://postgr.es/m/20200224185850.GA30899@alvherre.pgsql
M doc/src/sgml/trigger.sgml
Add prefix checks in exclude lists for pg_rewind, pg_checksums and base backups
commit : da2a7180aa0ed18d4e283a934d3f789912fd99c5
author : Michael Paquier <michael@paquier.xyz>
date : Mon, 24 Feb 2020 18:14:22 +0900
committer: Michael Paquier <michael@paquier.xyz>
date : Mon, 24 Feb 2020 18:14:22 +0900
An instance of PostgreSQL crashing with a bad timing could leave behind
temporary pg_internal.init files, potentially causing failures when
verifying checksums. As the same exclusion lists are used between
pg_rewind, pg_checksums and basebackup.c, all those tools are extended
with prefix checks to keep everything in sync, with dedicated checks
added for pg_internal.init.
Backpatch down to 11, where pg_checksums (pg_verify_checksums in 11) and
checksum verification for base backups have been introduced.
Reported-by: Michael Banck
Author: Michael Paquier
Reviewed-by: Kyotaro Horiguchi, David Steele
Discussion: https://postgr.es/m/62031974fd8e941dd8351fbc8c7eff60d59c5338.camel@credativ.de
Backpatch-through: 11
M src/backend/replication/basebackup.c
M src/bin/pg_basebackup/t/010_pg_basebackup.pl
M src/bin/pg_rewind/filemap.c
M src/bin/pg_verify_checksums/pg_verify_checksums.c
Remove extra word from comment.
commit : 2eadd00dd475e8f8731d67baf2a2296b8c13eeec
author : Etsuro Fujita <efujita@postgresql.org>
date : Thu, 20 Feb 2020 19:15:03 +0900
committer: Etsuro Fujita <efujita@postgresql.org>
date : Thu, 20 Feb 2020 19:15:03 +0900
M src/backend/partitioning/partbounds.c
Doc: discourage use of partial indexes for poor-man's-partitioning.
commit : bbce2912fa899de30783a6a76a6443b5a2aede8d
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Wed, 19 Feb 2020 18:52:18 -0500
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Wed, 19 Feb 2020 18:52:18 -0500
Creating a bunch of non-overlapping partial indexes is generally
a bad idea, so add an example saying not to do that.
Back-patch to v10. Before that, the alternative of using (real)
partitioning wasn't available, so that the tradeoff isn't quite
so clear cut.
Discussion: https://postgr.es/m/CAKVFrvFY-f7kgwMRMiPLbPYMmgjc8Y2jjUGK_Y0HVcYAmU6ymg@mail.gmail.com
M doc/src/sgml/indices.sgml
Fix typo
commit : c987c9d42bc698fb2930280d46d191a50abe68f1
author : Peter Eisentraut <peter@eisentraut.org>
date : Wed, 19 Feb 2020 20:52:42 +0100
committer: Peter Eisentraut <peter@eisentraut.org>
date : Wed, 19 Feb 2020 20:52:42 +0100
Reported-by: Daniel Verite <daniel@manitou-mail.org>
M src/common/unicode_norm.c
Fix confusion about event trigger vs. plain function in plpgsql.
commit : 612d207bcc05d1048a8648407b064df14cd3104a
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Wed, 19 Feb 2020 14:44:58 -0500
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Wed, 19 Feb 2020 14:44:58 -0500
The function hash table keys made by compute_function_hashkey() failed
to distinguish event-trigger call context from regular call context.
This meant that once we'd successfully made a hash entry for an event
trigger (either by validation, or by normal use as an event trigger),
an attempt to call the trigger function as a plain function would
find this hash entry and thereby bypass the you-can't-do-that check in
do_compile(). Thus we'd attempt to execute the function, leading to
strange errors or even crashes, depending on function contents and
server version.
To fix, add an isEventTrigger field to PLpgSQL_func_hashkey,
paralleling the longstanding infrastructure for regular triggers.
This fits into what had been pad space, so there's no risk of an ABI
break, even assuming that any third-party code is looking at these
hash keys. (I considered replacing isTrigger with a PLpgSQL_trigtype
enum field, but felt that that carried some API/ABI risk. Maybe we
should change it in HEAD though.)
Per bug #16266 from Alexander Lakhin. This has been broken since
event triggers were invented, so back-patch to all supported branches.
Discussion: https://postgr.es/m/16266-fcd7f838e97ba5d4@postgresql.org
M src/pl/plpgsql/src/pl_comp.c
M src/pl/plpgsql/src/plpgsql.h
M src/test/regress/expected/event_trigger.out
M src/test/regress/sql/event_trigger.sql
Fix mesurement of elapsed time during truncating heap in VACUUM.
commit : 414ed1ca232134e512ecfed1849f092f24f2a27a
author : Fujii Masao <fujii@postgresql.org>
date : Wed, 19 Feb 2020 20:37:26 +0900
committer: Fujii Masao <fujii@postgresql.org>
date : Wed, 19 Feb 2020 20:37:26 +0900
VACUUM may truncate heap in several batches. The activity report
is logged for each batch, and contains the number of pages in the table
before and after the truncation, and also the elapsed time during
the truncation. Previously the elapsed time reported in each batch was
the total elapsed time since starting the truncation until finishing
each batch. For example, if the truncation was processed dividing into
three batches, the second batch reported the accumulated time elapsed
during both first and second batches. This is strange and confusing
because the number of pages in the table reported together is not
total. Instead, each batch should report the time elapsed during
only that batch.
The cause of this issue was that the resource usage snapshot was
initialized only at the beginning of the truncation and was never
reset later. This commit fixes the issue by changing VACUUM so that
the resource usage snapshot is reset at each batch.
Back-patch to all supported branches.
Reported-by: Tatsuhito Kasahara
Author: Tatsuhito Kasahara
Reviewed-by: Masahiko Sawada, Fujii Masao
Discussion: https://postgr.es/m/CAP0=ZVJsf=NvQuy+QXQZ7B=ZVLoDV_JzsVC1FRsF1G18i3zMGg@mail.gmail.com
M src/backend/commands/vacuumlazy.c
Stop demanding that top xact must be seen before subxact in decoding.
commit : bff456d7a0b3dbd3dc5fc74f83e424a8ead458d1
author : Amit Kapila <akapila@postgresql.org>
date : Wed, 12 Feb 2020 12:00:01 +0530
committer: Amit Kapila <akapila@postgresql.org>
date : Wed, 12 Feb 2020 12:00:01 +0530
Manifested as
ERROR: subtransaction logged without previous top-level txn record
this check forbids legit behaviours like
- First xl_xact_assignment record is beyond reading, i.e. earlier
restart_lsn.
- After restart_lsn there is some change of a subxact.
- After that, there is second xl_xact_assignment (for another subxact)
revealing the relationship between top and first subxact.
Such a transaction won't be streamed anyway because we hadn't seen it in
full. Saying for sure whether xact of some record encountered after
the snapshot was deserialized can be streamed or not requires to know
whether it wrote something before deserialization point --if yes, it
hasn't been seen in full and can't be decoded. Snapshot doesn't have such
info, so there is no easy way to relax the check.
Reported-by: Hsu, John
Diagnosed-by: Arseny Sher
Author: Arseny Sher, Amit Kapila
Reviewed-by: Amit Kapila, Dilip Kumar
Backpatch-through: 9.5
Discussion: https://postgr.es/m/AB5978B2-1772-4FEE-A245-74C91704ECB0@amazon.com
M contrib/test_decoding/Makefile
A contrib/test_decoding/expected/subxact_without_top.out
A contrib/test_decoding/specs/subxact_without_top.spec
M src/backend/replication/logical/reorderbuffer.c
Teach pg_dump to dump comments on RLS policy objects.
commit : bd2cd138f9bbaea99f8d632914c33ae5103afa6c
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Mon, 17 Feb 2020 18:40:02 -0500
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Mon, 17 Feb 2020 18:40:02 -0500
This was unaccountably omitted in the original RLS patch.
The SQL syntax is basically the same as for comments on triggers,
so crib code from dumpTrigger().
Per report from Marc Munro. Back-patch to all supported branches.
Discussion: https://postgr.es/m/1581889298.18009.15.camel@bloodnok.com
M src/bin/pg_dump/pg_dump.c
Add description about LogicalRewriteTruncate wait event into document.
commit : 12bea22a78c147ff3a8cf6db8f03514171952610
author : Fujii Masao <fujii@postgresql.org>
date : Mon, 17 Feb 2020 15:33:32 +0900
committer: Fujii Masao <fujii@postgresql.org>
date : Mon, 17 Feb 2020 15:33:32 +0900
Back-patch to v10 where commit 249cf070e3 introduced
LogicalRewriteTruncate wait event.
Author: Fujii Masao
Reviewed-by: Michael Paquier
Discussion: https://postgr.es/m/949931aa-4ed4-d867-a7b5-de9c02b2292b@oss.nttdata.com
M doc/src/sgml/monitoring.sgml
Doc: fix old oversights in GRANT/REVOKE documentation.
commit : 736ba917f4849915b70794f291f85dedd890d2f8
author : Tom Lane <tgl@sss.pgh.pa.us>
date : Wed, 12 Feb 2020 14:13:13 -0500
committer: Tom Lane <tgl@sss.pgh.pa.us>
date : Wed, 12 Feb 2020 14:13:13 -0500
The GRANTED BY clause in GRANT/REVOKE ROLE has been there since 2005
but was never documented. I'm not sure now whether that was just an
oversight or was intentional (given the limited capability of the
option). But seeing that pg_dumpall does emit code that uses this
option, it seems like not documenting it at all is a bad idea.
Also, when we upgraded the syntax to allow CURRENT_USER/SESSION_USER
as the privilege recipient, the role form of GRANT was incorrectly
not modified to show that, and REVOKE's docs weren't touched at all.
Although I'm not that excited about GRANTED BY, the other oversight
seems serious enough to justify a back-patch.
Discussion: https://postgr.es/m/3070.1581526786@sss.pgh.pa.us
M doc/src/sgml/ref/grant.sgml
M doc/src/sgml/ref/revoke.sgml
Document the pg_upgrade -j/--jobs option as taking an argument
commit : 9dc4e15c8a6339f81dba3b078cd9f0f37f45179b
author : Peter Eisentraut <peter@eisentraut.org>
date : Tue, 11 Feb 2020 23:47:36 +0100
committer: Peter Eisentraut <peter@eisentraut.org>
date : Tue, 11 Feb 2020 23:47:36 +0100
M doc/src/sgml/ref/pgupgrade.sgml
M src/bin/pg_upgrade/option.c