Andres Freund [Mon, 21 May 2018 22:43:30 +0000 (15:43 -0700)]
Heavily-WIP: Send file descriptors to checkpointer for fsyncing.
This addresses the issue that, at least on linux, fsyncs only reliably
see errors that occurred after they've been opeend.
Author:
Reviewed-By:
Discussion: https://postgr.es/m/
Backpatch:
Andres Freund [Mon, 21 May 2018 22:43:30 +0000 (15:43 -0700)]
WIP: Optimize register_dirty_segment() to not repeatedly queue fsync requests.
Author: Andres Freund
Reviewed-By:
Discussion: https://postgr.es/m/
Backpatch:
Andres Freund [Mon, 21 May 2018 22:43:30 +0000 (15:43 -0700)]
WIP: Add FileOpenForFd().
Author: Andres Freund
Reviewed-By:
Discussion: https://postgr.es/m/
Backpatch:
Andres Freund [Mon, 21 May 2018 22:43:30 +0000 (15:43 -0700)]
Make FileGetRawDesc() ensure there's an associated kernel FD.
Author: Andres Freund
Reviewed-By:
Discussion: https://postgr.es/m/
Backpatch:
Andres Freund [Mon, 21 May 2018 22:43:30 +0000 (15:43 -0700)]
Add functions to send/receive data & FD over a unix domain socket.
This'll be used by a followup patch changing how the fsync request
queue works, to make it safe on linux.
TODO: This probably should live elsewhere.
Author: Andres Freund
Reviewed-By:
Discussion: https://postgr.es/m/
Backpatch:
Andres Freund [Mon, 21 May 2018 22:43:30 +0000 (15:43 -0700)]
freespace: Don't constantly close files when reading buffer.
fsm_readbuf() used to always do an smgrexists() when reading a buffer
beyond the known file size. That currently implies closing the md.c
handle, loosing all the data cached therein. Change this to only
check for file existance when not already known to be larger than 0
blocks.
Author: Andres Freund
Reviewed-By:
Discussion: https://postgr.es/m/
Backpatch:
Tom Lane [Mon, 21 May 2018 21:08:10 +0000 (17:08 -0400)]
Stamp 11beta1.
Peter Eisentraut [Mon, 21 May 2018 19:29:22 +0000 (15:29 -0400)]
Update SQL features list
Peter Eisentraut [Mon, 21 May 2018 18:54:24 +0000 (14:54 -0400)]
doc: Use = after long options in documentation
It's good for consistency and makes the examples easier to read.
Peter Eisentraut [Mon, 21 May 2018 18:49:53 +0000 (14:49 -0400)]
doc: Fix some trailing whitespace
Peter Eisentraut [Mon, 21 May 2018 18:41:27 +0000 (14:41 -0400)]
doc: Whitespace fixes in man pages
Tom Lane [Mon, 21 May 2018 16:36:59 +0000 (12:36 -0400)]
Doc: preliminary list of PG11 major features.
This might get bike-shedded a bit later, but it's better than shipping
beta1 with no list.
Jonathan Katz
Discussion: https://postgr.es/m/
D73971C5-8277-44F2-95D9-
C0B6E46EB55B@postgresql.org
Peter Eisentraut [Mon, 21 May 2018 16:27:42 +0000 (12:27 -0400)]
Translation updates
Source-Git-URL: git://git.postgresql.org/git/pgtranslation/messages.git
Source-Git-Hash:
3a5a71cccad5c68e01008e9e3a4f06930197a05e
Andrew Gierth [Mon, 21 May 2018 16:02:17 +0000 (17:02 +0100)]
Fix SQL:2008 FETCH FIRST syntax to allow parameters.
OFFSET <x> ROWS FETCH FIRST <y> ROWS ONLY syntax is supposed to accept
<simple value specification>, which includes parameters as well as
literals. When this syntax was added all those years ago, it was done
inconsistently, with <x> and <y> being different subsets of the
standard syntax.
Rectify that by making <x> and <y> accept the same thing, and allowing
either a (signed) numeric literal or a c_expr there, which allows for
parameters, variables, and parenthesized arbitrary expressions.
Per bug #15200 from Lukas Eder.
Backpatch all the way, since this has been broken from the start.
Discussion: https://postgr.es/m/
[email protected]
Discussion: http://postgr.es/m/
152647780335.27204.
16895288237122418685@wrigleys.postgresql.org
Peter Eisentraut [Mon, 21 May 2018 16:14:46 +0000 (12:14 -0400)]
Update key words table for version 11
Peter Eisentraut [Mon, 21 May 2018 15:41:37 +0000 (11:41 -0400)]
doc: Fix some whitespace issues
Tom Lane [Mon, 21 May 2018 15:41:42 +0000 (11:41 -0400)]
Improve spelling of new FINALFUNC_MODIFY aggregate attribute.
I'd used SHARABLE as a value originally, but Peter Eisentraut points out
that dictionaries agree that SHAREABLE is the preferred spelling.
Run around and change that before it's too late.
Discussion: https://postgr.es/m/
d2e1afd4-659c-50d6-1b20-
7cfd3675e909@2ndquadrant.com
Tom Lane [Mon, 21 May 2018 15:21:08 +0000 (11:21 -0400)]
Doc: fix bogus cross-reference link.
An xref to a <para>'s ID isn't very helpful because paras don't have
names. This causes a warning while building PDFs, though for some
reason not while building HTML. The link arguably went to the wrong
place, too.
To fix, introduce a sub-section we can reference.
Peter Eisentraut [Mon, 21 May 2018 14:01:49 +0000 (10:01 -0400)]
pg_basebackup: Remove short option -k
-k meant --no-verify-checksums, which is the opposite of what initdb
uses -k for. After discussion, a short option does not seem necessary,
so just keep the long option.
Discussion: https://www.postgresql.org/message-id/flat/
d510f8aa-19e1-d06e-7630-
ad27f7441d68%402ndquadrant.com
Tom Lane [Mon, 21 May 2018 04:32:28 +0000 (00:32 -0400)]
Fix unsafe usage of strerror(errno) within ereport().
This is the converse of the unsafe-usage-of-%m problem: the reason
ereport/elog provide that format code is mainly to dodge the hazard
of errno getting changed before control reaches functions within the
arguments of the macro. I only found one instance of this hazard,
but it's been there since 9.4 :-(.
Tom Lane [Sun, 20 May 2018 22:06:00 +0000 (18:06 -0400)]
Fix unportable usage of printf("%m").
While glibc's version of printf accepts %m, most others do not;
to be portable, we have to do it the hard way with strerror(errno).
pg_verify_checksums evidently did not get that memo.
Noted while fooling around with NetBSD-current, which generates
a compiler warning for this mistake.
Tom Lane [Sun, 20 May 2018 15:40:54 +0000 (11:40 -0400)]
printf("%lf") is not portable, so omit the "l".
The "l" (ell) width spec means something in the corresponding scanf usage,
but not here. While modern POSIX says that applying "l" to "f" and other
floating format specs is a no-op, SUSv2 says it's undefined. Buildfarm
experience says that some old compilers emit warnings about it, and at
least one old stdio implementation (mingw's "ANSI" option) actually
produces wrong answers and/or crashes.
Discussion: https://postgr.es/m/21670.
1526769114@sss.pgh.pa.us
Discussion: https://postgr.es/m/
c085e1da-0d64-1c15-242d-
c921f32e0d5c@dunslane.net
Tom Lane [Sat, 19 May 2018 20:04:47 +0000 (16:04 -0400)]
Assorted minor cleanups for bootstrap-data Perl scripts.
FindDefinedSymbol was intended to take an array of possible include
paths, but it never actually worked correctly for any but the first
array element. Since there's no use-case for more than one path
anyway, let's just simplify this code and its callers by redefining
it as taking only one include path.
Minor other code-beautification without functional effects, except
that in one place we format the output as pgindent would do.
John Naylor
Discussion: https://postgr.es/m/CAJVSVGXM_n32hTTkircW4_K1LQFsJNb6xjs0pAP4QC0ZpyJfPQ@mail.gmail.com
Tom Lane [Sat, 19 May 2018 18:22:18 +0000 (14:22 -0400)]
Support platforms where strtoll/strtoull are spelled __strtoll/__strtoull.
Ancient HPUX, for one, does this. We hadn't noticed due to the lack
of regression tests that required a working strtoll.
(I was slightly tempted to remove the other historical spelling,
strto[u]q, since it seems we have no buildfarm members testing that case.
But I refrained.)
Discussion: https://postgr.es/m/
151935568942.1461.
14623890240535309745@wrigleys.postgresql.org
Tom Lane [Sat, 19 May 2018 02:42:10 +0000 (22:42 -0400)]
Arrange to supply declarations for strtoll/strtoull if needed.
Buildfarm member dromedary is still unhappy about the recently-added
ecpg "long long" tests. The reason turns out to be that it includes
"-ansi" in its CFLAGS, and in their infinite wisdom Apple have decided
to hide the declarations of strtoll/strtoull in C89-compliant builds.
(I find it pretty curious that they hide those function declarations
when you can nonetheless declare a "long long" variable, but anyway
that is their behavior, both on dromedary's obsolete macOS version and
the newest and shiniest.) As a result, gcc assumes these functions
return "int", leading naturally to wrong results.
(Looking at dromedary's past build results, it's evident that this
problem also breaks pg_strtouint64() on 32-bit platforms; but we
evidently have no regression tests that exercise that function with
values above 32 bits.)
To fix, supply declarations for these functions when the platform
provides the functions but not the declarations, using the same type
of mechanism as we use for some other similar cases.
Discussion: https://postgr.es/m/
151935568942.1461.
14623890240535309745@wrigleys.postgresql.org
Stephen Frost [Sat, 19 May 2018 01:20:27 +0000 (21:20 -0400)]
Fix for globals.c- c.h must come first
Commit
da9b580 mistakenly put a system header before postgres.h (which
includes c.h). That can cause portability issues and broke (at least)
builds with older Windows compilers.
Discovered by Mark Dilger.
Discussion: https://postgr.es/m/
BF04A27A-D132-4927-A80A-
BAD18695E954@gmail.com
Tom Lane [Fri, 18 May 2018 23:03:32 +0000 (19:03 -0400)]
Hot-fix ecpg regression test for missing ecpg_config.h inclusion.
I don't think this is really the best long-term answer, and in
particular it doesn't fix the pre-existing hazard in sqltypes.h.
But for the moment let's just try to make the buildfarm green again.
Discussion: https://postgr.es/m/
151935568942.1461.
14623890240535309745@wrigleys.postgresql.org
Robert Haas [Fri, 18 May 2018 20:09:14 +0000 (16:09 -0400)]
Further adjust comment in get_partition_dispatch_recurse.
In editing
09b12d52db1cf1a4c72d876f3fb6c9d06919e51a I made it wrong;
fix that and try to more clearly explain the situation.
Patch by me, reviewed by David Rowley and Amit Langote
Discussion: http://postgr.es/m/CA+TgmobAq+mA5hzm0a5OS38qQY5758DDDGqa3sBJN4hvir-H9w@mail.gmail.com
Tom Lane [Fri, 18 May 2018 17:04:59 +0000 (13:04 -0400)]
Add some test coverage for ecpg's "long long" support.
This will only actually exercise the "long long" code paths on platforms
where "long" is 32 bits --- otherwise, the SQL bigint type maps to
plain "long", and we will test that code path instead. But that's
probably sufficient coverage, and anyway we weren't testing either
code path before.
Dang Minh Huong, tweaked a bit by me
Discussion: https://postgr.es/m/
151935568942.1461.
14623890240535309745@wrigleys.postgresql.org
Tom Lane [Fri, 18 May 2018 16:52:28 +0000 (12:52 -0400)]
Recognize that MSVC can support strtoll() and strtoull().
This is needed for full support of "long long" variables in ecpg, but
the previous patch for bug #15080 (commits
51057feaa et al) missed it.
In MSVC versions where the functions don't exist under those names,
we can nonetheless use _strtoi64() and _strtoui64().
Like the previous patch, back-patch all the way.
Dang Minh Huong
Discussion: https://postgr.es/m/
151935568942.1461.
14623890240535309745@wrigleys.postgresql.org
Tom Lane [Fri, 18 May 2018 16:10:19 +0000 (12:10 -0400)]
Small improvement for plpgsql regression test.
Use DISCARD PLANS instead of a reconnect to force reconstruction of
a cached plan; this corresponds more nearly to what people might
actually do in practice.
Magnus Hagander [Fri, 18 May 2018 15:52:18 +0000 (17:52 +0200)]
Fix error message on short read of pg_control
Instead of saying "error: success", indicate that we got a working read
but it was too short.
Tom Lane [Fri, 18 May 2018 15:53:18 +0000 (11:53 -0400)]
MSVC builds must use a separate stamp file for copying generated headers.
Commit
bad51a49a tried to use a shortcut with just one stamp file
recording the actions of generating the pg_*_d.h headers and copying
them to the src/include/catalog/ directory. That doesn't work in all
scenarios though, so we must use two stamp files like the Makefiles do.
John Naylor
Discussion: https://postgr.es/m/CANFyU944GdHr=puPbA78STnqr=8kgMrGF-VDHck6aO_-qNDALg@mail.gmail.com
Andrew Dunstan [Fri, 18 May 2018 14:46:38 +0000 (10:46 -0400)]
Prevent possibly spurious error when running perl -cw
Peter Eisentraut [Fri, 18 May 2018 03:05:27 +0000 (23:05 -0400)]
Message wording and pluralization improvements
Peter Eisentraut [Wed, 9 May 2018 18:25:04 +0000 (14:25 -0400)]
Fix whitespace
Andrew Gierth [Thu, 17 May 2018 20:23:48 +0000 (21:23 +0100)]
doc: fix description of backward_scan
The description of the index property backward_scan was incorrect and
misleading; rectify.
Backpatch to 9.6 where the amutils functionality was introduced.
Bruce Momjian [Thu, 17 May 2018 18:23:22 +0000 (14:23 -0400)]
doc: fix PG 11 attribution
Tom Lane [Thu, 17 May 2018 15:10:50 +0000 (11:10 -0400)]
Make numeric power() handle NaNs according to the modern POSIX spec.
In commit
6bdf1303b, we ensured that power()/^ for float8 would honor
the NaN behaviors specified by POSIX standards released in this century,
ie NaN ^ 0 = 1 and 1 ^ NaN = 1. However, numeric_power() was not
touched and continued to follow the once-common behavior that every
case involving NaN input produces NaN. For consistency, let's switch
the numeric behavior to the modern spec in the same release that ensures
that behavior for float8.
(Note that while
6bdf1303b was initially back-patched, we later undid
that, concluding that any behavioral change should appear only in v11.)
Discussion: https://postgr.es/m/10898.
1526421338@sss.pgh.pa.us
Bruce Momjian [Thu, 17 May 2018 00:36:22 +0000 (20:36 -0400)]
doc: PG 11 release notes adjustments
Tom Lane [Wed, 16 May 2018 18:56:52 +0000 (14:56 -0400)]
Detoast plpgsql variables if they might live across a transaction boundary.
Up to now, it's been safe for plpgsql to store TOAST pointers in its
variables because the ActiveSnapshot for whatever query called the plpgsql
function will surely protect such TOAST values from being vacuumed away,
even if the owning table rows are committed dead. With the introduction of
procedures, that assumption is no longer good in "non atomic" executions
of plpgsql code. We adopt the slightly brute-force solution of detoasting
all TOAST pointers at the time they are stored into variables, if we're in
a non-atomic context, just in case the owning row goes away.
Some care is needed to avoid long-term memory leaks, since plpgsql tends
to run with CurrentMemoryContext pointing to its call-lifespan context,
but we shouldn't assume that no memory is leaked by heap_tuple_fetch_attr.
In plpgsql proper, we can do the detoasting work in the "eval_mcontext".
Most of the code thrashing here is due to the need to add this capability
to expandedrecord.c as well as plpgsql proper. In expandedrecord.c,
we can't assume that the caller's context is short-lived, so make use of
the short-term sub-context that was already invented for checking domain
constraints. In view of this repurposing, it seems good to rename that
variable and associated code from "domain_check_cxt" to "short_term_cxt".
Peter Eisentraut and Tom Lane
Discussion: https://postgr.es/m/
5AC06865.
9050005@anastigmatix.net
Tom Lane [Wed, 16 May 2018 17:46:09 +0000 (13:46 -0400)]
Fix misprocessing of equivalence classes involving record_eq().
canonicalize_ec_expression() is supposed to agree with coerce_type() as to
whether a RelabelType should be inserted to make a subexpression be valid
input for the operators of a given opclass. However, it did the wrong
thing with named-composite-type inputs to record_eq(): it put in a
RelabelType to RECORDOID, which the parser doesn't. In some cases this was
harmless because all code paths involving a particular equivalence class
did the same thing, but in other cases this would result in failing to
recognize a composite-type expression as being a member of an equivalence
class that it actually is a member of. The most obvious bad effect was to
fail to recognize that an index on a composite column could provide the
sort order needed for a mergejoin on that column, as reported by Teodor
Sigaev. I think there might be other, subtler, cases that result in
misoptimization. It also seems possible that an unwanted RelabelType
would sometimes get into an emitted plan --- but because record_eq and
friends don't examine the declared type of their input expressions, that
would not create any visible problems.
To fix, just treat RECORDOID as if it were a polymorphic type, which in
some sense it is. We might want to consider formalizing that a bit more
someday, but for the moment this seems to be the only place where an
IsPolymorphicType() test ought to include RECORDOID as well.
This has been broken for a long time, so back-patch to all supported
branches.
Discussion: https://postgr.es/m/
a6b22369-e3bf-4d49-f59d-
0c41d3551e81@sigaev.ru
Robert Haas [Wed, 16 May 2018 15:32:38 +0000 (11:32 -0400)]
Pass the correct PlannerInfo to PlanForeignModify/PlanDirectModify.
Previously, we passed the toplevel PlannerInfo, but we actually want
to pass the relevant subroot. One problem with passing the toplevel
PlannerInfo is that the FDW which wants to push down an UPDATE or
DELETE against a join won't find the relevant joinrel there.
As of commit
1bc0100d270e5bcc980a0629b8726a32a497e788, postgres_fdw
tries to do exactly this and can be made to fail an assertion as a
result.
It's possible that this should be regarded as a bug fix and
back-patched to earlier releases, but for lack of a test case that
fails in earlier releases, no back-patch for now.
Etsuro Fujita, reviewed by Amit Langote.
Discussion: http://postgr.es/m/
5AF43E02[email protected]
Robert Haas [Wed, 16 May 2018 14:46:55 +0000 (10:46 -0400)]
Improve comment in get_partition_dispatch_recurse.
David Rowley, reviewed by Amit Langote, and revised a bit by me.
Discussion: http://postgr.es/m/CAKJS1f9yyimYyFzbHM4EwE+tkj4jvrHqSH0H4S4Kbas=UFpc9Q@mail.gmail.com
Bruce Momjian [Wed, 16 May 2018 00:03:42 +0000 (20:03 -0400)]
docs: add space in PG 11 release notes, huge/large
Reported-by: Tatsuo Ishii
Bruce Momjian [Tue, 15 May 2018 23:57:40 +0000 (19:57 -0400)]
docs: PG 11 rel notes, 'ps' display/background worker item
Bruce Momjian [Tue, 15 May 2018 23:12:16 +0000 (19:12 -0400)]
doc: adjust Extended Query PG 11 release note item
Reported-by: Tatsuo Ishii
Bruce Momjian [Tue, 15 May 2018 19:55:53 +0000 (15:55 -0400)]
docs: update PG 11 release notes based on feedback
Tom Lane [Tue, 15 May 2018 19:06:53 +0000 (15:06 -0400)]
Fix type checking for support functions of parallel VARIADIC aggregates.
The impact of VARIADIC on the combine/serialize/deserialize support
functions of an aggregate wasn't thought through carefully. There is
actually no impact, because variadicity isn't passed through to these
functions (and it doesn't seem like it would need to be). However,
lookup_agg_function was mistakenly told to check things as though it were
passed through. The net result was that it was impossible to declare an
aggregate that had both VARIADIC input and parallelism support functions.
In passing, fix a runtime check in nodeAgg.c for the combine function's
strictness to make its error message agree with the creation-time check.
The previous message was actually backwards, and it doesn't seem like
there's a good reason to have two versions of this message text anyway.
Back-patch to 9.6 where parallel aggregation was introduced.
Alexey Bashtanov; message fix by me
Discussion: https://postgr.es/m/
f86dde87-fef4-71eb-0480-
62754aaca01b@imap.cc
Bruce Momjian [Tue, 15 May 2018 00:45:35 +0000 (20:45 -0400)]
doc: clarify SCRAM channel binding
Discussion: https://postgr.es/m/
20180514231020[email protected]
Reviewed-by: Michael Paquier
Bruce Momjian [Mon, 14 May 2018 20:41:49 +0000 (16:41 -0400)]
doc: update PG 11 release notes with suggested changes
Alvaro Herrera [Mon, 14 May 2018 17:09:32 +0000 (13:09 -0400)]
Don't allow partitioned index on foreign-table partitions
Creating indexes on foreign tables is already forbidden, but local
partitioned indexes (commit
8b08f7d4820f) forgot to check for them. Add
a preliminary check to prevent wasting time.
Another school of thought says to allow the index to be created if it's
not a unique index; but it's possible to do better in the future (enable
indexing of foreign tables, somehow), so we avoid painting ourselves in
a corner by rejecting all cases, to avoid future grief (a.k.a. backward
incompatible changes).
Reported-by: Arseny Sher
Author: Amit Langote, Álvaro Herrera
Discussion: https://postgr.es/m/87sh71cakz.fsf@ars-thinkpad
Magnus Hagander [Mon, 14 May 2018 16:59:43 +0000 (18:59 +0200)]
Fix file paths in comments
Author: Daniel Gustafsson <
[email protected]>
Alvaro Herrera [Mon, 14 May 2018 15:43:14 +0000 (11:43 -0400)]
psql: have \d show FKs on partitioned tables
Commit
3de241dba86f missed to update psql to display foreign keys on
partitioned tables. Add that.
Reported-by: Amit Langote
Author: Amit Langote
Reviewed-by: Álvaro Herrera
Discussion: https://postgr.es/m/
a66879e5-636f-d4dd-b4a4-
92bdca5a828f@lab.ntt.co.jp
Tom Lane [Mon, 14 May 2018 16:08:02 +0000 (12:08 -0400)]
Doc: fix minor release-note typo.
Liudmila Mantrova
Discussion: https://postgr.es/m/
d13458be-c4b9-0fd8-f333-
c8de4d0c9120@postgrespro.ru
Bruce Momjian [Sun, 13 May 2018 00:46:37 +0000 (20:46 -0400)]
doc: update PG 11 rel. notes for ALTER TABLE's non-null default
Reported-by: Peter Geoghegan
Alvaro Herrera [Sat, 12 May 2018 15:08:17 +0000 (12:08 -0300)]
docs: Rework sections on partition pruning/exclusion
Explain partition pruning more thoroughly, in a section above the one
that explains constraint exclusion, since the new feature is the one
that will be used more extensively from now on. Move some of the
material from the constraint exclusion subsection to the one on
partition pruning, so that we can explain the legacy method by
explaining the differences with the new one instead of repeating it.
Author: David Rowley, Álvaro Herrera
Reviewed-by: Amit Langote, David G. Johnston, Justin Pryzby
Discussion: https://postgr.es/m/CAKJS1f8PECxEi1YQ9nhVtshtfOMHUzAMm_Zp4gGCOCnMPjEKJA@mail.gmail.com
Tom Lane [Fri, 11 May 2018 21:19:21 +0000 (17:19 -0400)]
Doc: fix overenthusiastic markup.
I get "WARNING: nested link may be undefined in output: <xref @linkend =
'pgbench'> nested inside parent element link" from this.
Also remove some trailing whitespace.
Bruce Momjian [Fri, 11 May 2018 21:06:22 +0000 (17:06 -0400)]
docs: more PG 11 markup and email suggestions
Bruce Momjian [Fri, 11 May 2018 18:47:26 +0000 (14:47 -0400)]
doc: markup for PG 11 release notes and included email tips
Bruce Momjian [Fri, 11 May 2018 14:54:03 +0000 (10:54 -0400)]
docs: initial draft of PG 11 release notes
Bruce Momjian [Fri, 11 May 2018 02:37:26 +0000 (22:37 -0400)]
docs: clarify that CREATE TABLE ... _AS_ can be parallelized
CREATE TABLE without AS doesn't have anything to parallelize.
Teodor Sigaev [Thu, 10 May 2018 10:31:47 +0000 (13:31 +0300)]
Various improvements of skipping index scan during vacuum technics
- Change vacuum_cleanup_index_scale_factor GUC to PGC_USERSET.
vacuum_cleanup_index_scale_factor GUC was defined as PGC_SIGHUP. But this
GUC affects not only autovacuum. So it might be useful to change it from user
session in order to influence manually runned VACUUM.
- Add missing tab-complete support for vacuum_cleanup_index_scale_factor
reloption.
- Fix condition for B-tree index cleanup.
Zero value of vacuum_cleanup_index_scale_factor means that user wants B-tree
index cleanup to be never skipped.
- Documentation and comment improvements
Authors: Justin Pryzby, Alexander Korotkov, Liudmila Mantrova
Reviewed by: all authors and Robert Haas
Discussion: https://www.postgresql.org/message-id/flat/
20180502023025.GD7631%40telsasoft.com
Robert Haas [Wed, 9 May 2018 19:15:03 +0000 (15:15 -0400)]
doc: Restrictions on InitPlans in parallel queries relaxed.
This updates the documentation for changes originally made in commit
e89a71fb449af2ef74f47be1175f99956cf21524.
Patch by me, reviewed (but not entirely endorsed) by Amit Kapila.
Discussion: http://postgr.es/m/CA+Tgmoa+vupW8V_gBonz6hU7WwN2zJ=UTsVWCVB+rN6vaaXfZw@mail.gmail.com
Tom Lane [Wed, 9 May 2018 17:55:27 +0000 (13:55 -0400)]
Update time zone data files to tzdata release 2018e.
DST law changes in North Korea. Redefinition of "daylight savings" in
Ireland, as well as for some past years in Namibia and Czechoslovakia.
Additional historical corrections for Czechoslovakia.
With this change, the IANA database models Irish timekeeping as following
"standard time" in summer, and "daylight savings" in winter, so that the
daylight savings offset is one hour behind standard time not one hour
ahead. This does not change their UTC offset (+1:00 in summer, 0:00 in
winter) nor their timezone abbreviations (IST in summer, GMT in winter),
though now "IST" is more correctly read as "Irish Standard Time" not "Irish
Summer Time". However, the "is_dst" column in the pg_timezone_names view
will now be true in winter and false in summer for the Europe/Dublin zone.
Similar changes were made for Namibia between 1994 and 2017, and for
Czechoslovakia between 1946 and 1947.
So far as I can find, no Postgres internal logic cares about which way
tm_isdst is reported; in particular, since commit
b2cbced9e we do not
rely on it to decide how to interpret ambiguous timestamps during DST
transitions. So I don't think this change will affect any Postgres
behavior other than the timezone-view outputs.
Discussion: https://postgr.es/m/30996.
1525445902@sss.pgh.pa.us
Alvaro Herrera [Wed, 9 May 2018 17:03:43 +0000 (14:03 -0300)]
pgstatindex, pageinspect: handle partitioned indexes
Commit
8b08f7d4820f failed to update these modules to at least give
non-broken error messages for partitioned indexes. Add appropriate
error support to them.
Peter G. was complaining about a problem of unfriendly error messages;
while we haven't fixed that yet, subsequent discussion let to discovery
of these unhandled cases.
Author: Michaël Paquier
Reported-by: Peter Geoghegan
Discussion: https://postgr.es/m/CAH2-WzkOKptQiE51Bh4_xeEHhaBwHkZkGtKizrFMgEkfUuRRQg@mail.gmail.com
Alvaro Herrera [Wed, 9 May 2018 16:44:50 +0000 (13:44 -0300)]
pgstatindex: HASH -> hash
Fix the lone error message in the whole source tree to use capitalized
HASH when referring to hash indexes, making it look like all the other
messages.
Someday it would be good to standardize 'B-Tree', 'B-tree', 'btree', and
random other spellings, too, but that's a larger patch ...
Author: Álvaro Herrera
Alvaro Herrera [Wed, 9 May 2018 16:32:50 +0000 (13:32 -0300)]
Add relkind 'I' to catalog.sgml's list relkinds
Commit
8b08f7d4820f added a relkind for local partitioned indexes, but
failed to add it to pg_class's list of possible relkinds. Repair.
Author: Peter Geoghegan, Michaël Paquier
Discussion: https://postgr.es/m/CAH2-WzkOKptQiE51Bh4_xeEHhaBwHkZkGtKizrFMgEkfUuRRQg@mail.gmail.com
Alvaro Herrera [Wed, 9 May 2018 13:51:23 +0000 (10:51 -0300)]
Fix assorted partition pruning bugs
match_clause_to_partition_key failed to consider COERCION_PATH_ARRAYCOERCE
cases in scalar-op-array expressions, so it was possible to crash the
server easily. To handle this case properly (ie. prune partitions) we
would need to run a bit of executor code during planning. Maybe it can
be improved, but for now let's just not crash. Add a test case that
used to trigger the crash.
Author: Michaël Paquier
match_clause_to_partition_key failed to indicate that operators that
don't have a commutator in a btree opclass are unsupported. It is
possible for this to cause a crash later if such an operator is used in
a scalar-op-array expression. Add a test case that used to the crash.
Author: Amit Langote
One caller of gen_partprune_steps_internal in
match_clause_to_partition_key was too optimistic about the former never
returning an empty step list. Rid it of its innocence. (Having fixed
the bug above, I no longer know how to exploit this, so no test case for
it, but it remained a bug.) Revise code flow a little bit, for
succintness.
Author: Álvaro Herrera
Reported-by: Marina Polyakova
Reviewed-by: Michaël Paquier
Reviewed-by: Amit Langote
Reviewed-by: Álvaro Herrera
Discussion: https://postgr.es/m/
ff8f9bfa485ff961d6bb43e54120485b@postgrespro.ru
Andrew Dunstan [Wed, 9 May 2018 14:14:46 +0000 (10:14 -0400)]
Restrict vertical tightness to parentheses in Perl code
The vertical tightness settings collapse vertical whitespace between
opening and closing brackets (parentheses, square brakets and braces).
This can make data structures in particular harder to read, and is not
very consistent with our style in non-Perl code. This patch restricts
that setting to parentheses only, and reformats all the perl code
accordingly. Not applying this to parentheses has some unfortunate
effects, so the consensus is to keep the setting for parentheses and not
for the others.
The diff for this patch does highlight some places where structures
should have trailing commas. They can be added manually, as there is no
automatic tool to do so.
Discussion: https://postgr.es/m/
a2f2b87c-56be-c070-bfc0-
36288b4b41c1@2ndQuadrant.com
Andrew Dunstan [Wed, 9 May 2018 14:04:17 +0000 (10:04 -0400)]
perltidy some recent code changes before changing perltidy settings
Alvaro Herrera [Wed, 9 May 2018 13:40:21 +0000 (10:40 -0300)]
Make gen_partprune_steps static
There's no need to export this function, so don't. Michaël didn't
actually write the patch, but we list him as first author because with a
trivial one like this, intellectual authorship is as important (if not
more) as bit shovelling.
Author: Michaël Paquier, Amit Langote
Discussion: https://postgr.es/m/
c91299c4-199b-0f16-339b-
a29d6d2a39ee@lab.ntt.co.jp
Alvaro Herrera [Wed, 9 May 2018 13:33:55 +0000 (10:33 -0300)]
Remove useless 'default' clause
Author: Michael Paquier
Reviewed-by: Amit Langote
Reviewed-by: Álvaro Herrera
Discussion: https://postgr.es/m/
20180424012042[email protected]
Discussion: https://postgr.es/m/
20180509061039[email protected]
Andrew Dunstan [Wed, 9 May 2018 11:55:23 +0000 (07:55 -0400)]
Add a script and a config file to run perlcritic
This is similar to what we do to run perltidy. For now we only run at
severity level 5. Over time we can improve our perl code and reduce the
severity level.
Discussion: https://postgr.es/m/
86aa2a3a-0c68-21fb-9560-
84ad6914d561@2ndQuadrant.com
Teodor Sigaev [Wed, 9 May 2018 10:23:16 +0000 (13:23 +0300)]
Improve jsonb cast error message
Initial variant of error message didn't follow style of another casting error
messages and wasn't informative. Per gripe from Robert Haas.
Reviewer: Tom Lane
Discussion: https://www.postgresql.org/message-id/flat/CA%2BTgmob08StTV9yu04D0idRFNMh%2BUoyKax5Otvrix7rEZC8rMw%40mail.gmail.com#CA+Tgmob08StTV9yu04D0idRFNMh+UoyKax5Otvrix7rEZC8rMw@mail.gmail.com
Tom Lane [Wed, 9 May 2018 00:17:43 +0000 (20:17 -0400)]
Improve inefficient regexes in vacuumdb TAP test.
The regexes used in 102_vacuumdb_stages.pl to check the postmaster log
for expected output contained several places with ".*.*", which is
underdetermined and can cause exponential runtime growth in Perl's regex
matcher (since it's not bright enough not to waste time seeing whether
different splits of the same substring would allow a match). We were
fortunate that the amount of text in the postmaster log was generally not
enough to make the runtime go to the moon; although commit
6271fceb8 had
been on the hairy edge of an obvious problem, thanks to its increasing the
default log verbosity to DEBUG1. Experimentation shows that anyone who
tried to run this test case with an even higher log verbosity would have
been in for serious pain. But even at default logging level, fixing this
saves several hundred ms on my workstation, more on slower buildfarm
members.
Remove the extra ".*"s, restoring more-or-less-linear matching speed.
Back-patch to 9.4 where the test case was added, mostly in case anyone
tries to do related debugging in a back branch.
Discussion: https://postgr.es/m/32459.
1525657786@sss.pgh.pa.us
Tom Lane [Tue, 8 May 2018 19:59:01 +0000 (15:59 -0400)]
Improve initdb's query for generating default descriptions a little.
While poking into initdb's performance, I noticed that this query
wasn't being done very intelligently. By forcing it to execute
obj_description() for each pg_proc/pg_operator join row, we were
essentially setting up a nestloop join to pg_description, which
is not a bright query plan when there are hundreds of outer rows.
Convert the check for a "deprecated" operator into a NOT EXISTS
so that it can be done as a hashed antijoin. On my workstation
this reduces the time for this query from ~ 35ms to ~ 10ms.
Which is not a huge win, but it adds up over buildfarm runs.
In passing, insert forced query breaks (\n\n, in single-user mode)
after each SQL-query file that initdb sources, and after some
relatively new queries in setup_privileges(). This doesn't make
a lot of difference normally, but it will result in briefer, saner
error messages if anything goes wrong.
Peter Eisentraut [Tue, 8 May 2018 18:36:31 +0000 (14:36 -0400)]
Refine error messages
"JSON" when not referring to a data type should be upper case.
Tom Lane [Tue, 8 May 2018 04:20:19 +0000 (00:20 -0400)]
Count heap tuples in non-SnapshotAny path in IndexBuildHeapRangeScan().
Brown-paper-bag bug in commit
7c91a0364: when we rearranged the placement
of "reltuples += 1" statements, we missed including one in this code path.
The net effect of that was that CREATE INDEX CONCURRENTLY would set the
table's pg_class.reltuples to zero, as would index builds done during
bootstrap mode. (It seems like parallel index builds ought to fail
similarly, but they don't, perhaps because reltuples is computed in some
other way. You certainly couldn't figure that out from the abysmally
underdocumented parallelism code in this area.)
I was led to this by wondering why initdb seemed to have slowed down as
a result of
7c91a0364, as is evident in the buildfarm's timing history.
The reason is that every system catalog with indexes had pg_class.reltuples
= 0 after bootstrap, causing the planner to make some terrible choices for
queries in the post-bootstrap steps. On my workstation, this fix causes
the runtime of "initdb -N" to drop from ~2.0 sec to ~1.4 sec, which is
almost though not quite back to where it was in v10. That's not much of
a deal for production use perhaps, but it makes a noticeable difference
for buildfarm and "make check-world" runs, which do a lot of initdbs.
Andrew Dunstan [Mon, 7 May 2018 19:21:00 +0000 (15:21 -0400)]
Clean up some perlcritic warnings
In Catalog.pm, mark eval of a string instead of a block as allowed.
Disallow perlcritic completely in Gen_dummy_probes.pl, as it's
generated code.
Protect a couple of lines in plperl code from perltidy, so that the
annotation for perlcritic stays on the same line as the construct it
would otherwise object to.
Tom Lane [Mon, 7 May 2018 19:12:01 +0000 (15:12 -0400)]
Undo extra chattiness of postmaster logs in TAP tests.
Commit
6271fceb8 changed PostgresNode.pm to force log_min_messages = debug1
in all TAP tests, without any discussion and without a concrete need for
it. This makes some of the TAP tests noticeably slower (although much of
that may be due to poorly-written regexes), and for certain it's bloating
the buildfarm logs. Revert the change.
Discussion: https://postgr.es/m/32459.
1525657786@sss.pgh.pa.us
Tom Lane [Mon, 7 May 2018 18:32:04 +0000 (14:32 -0400)]
Update oidjoins regression test for v11.
Commit
86f575948 already manually updated the oidjoins test for the
new pg_constraint.conparentid => pg_constraint.oid relationship, but
failed to update findoidjoins/README, thus the apparent inconsistency
here.
Michael Paquier
Discussion: https://postgr.es/m/
20180507001811[email protected]
Tom Lane [Mon, 7 May 2018 17:44:09 +0000 (13:44 -0400)]
Suppress compiler warnings when building with --enable-dtrace.
Most versions of "dtrace -h" drop const qualifiers from the declarations
of probe functions (though macOS gets it right). This causes compiler
warnings when we pass in pointers to const. Repair by extending our
existing post-processing of the probes.h file. To do so, assume that all
"char *" arguments should be "const char *"; that seems reasonably safe.
Thomas Munro
Discussion: https://postgr.es/m/CAEepm=2j1pWSruQJqJ91ZDzD8w9ZZDsM4j2C6x75C-VryWg-_w@mail.gmail.com
Tom Lane [Mon, 7 May 2018 17:13:27 +0000 (13:13 -0400)]
Last-minute updates for release notes.
The set of functions that need parallel-safety adjustments isn't the
same in 9.6 as 10, so I shouldn't have blindly back-patched that list.
Adjust as needed. Also, provide examples of the commands to issue.
Tom Lane [Mon, 7 May 2018 15:50:05 +0000 (11:50 -0400)]
Last-minute updates for release notes.
Security: CVE-2018-1115
Peter Eisentraut [Mon, 7 May 2018 15:05:19 +0000 (11:05 -0400)]
doc: Improve spelling and wording a bit
Peter Eisentraut [Mon, 7 May 2018 14:16:17 +0000 (10:16 -0400)]
doc: Fix minor markup issue
There shouldn't be a line break between two adjacent tags, because that
will appear as whitespace in the output. (The rendering engine might in
turn collapse that whitespace away, so it might not actually make a
difference, but it's more correct this way.)
Stephen Frost [Mon, 7 May 2018 14:10:33 +0000 (10:10 -0400)]
adminpack: Revoke EXECUTE on pg_logfile_rotate()
In 9.6, we moved a number of functions over to using the GRANT system to
control access instead of having hard-coded superuser checks.
As it turns out, adminpack was creating another function in the catalog
for one of those backend functions where the superuser check was
removed, specifically pg_rotate_logfile(), but it didn't get the memo
about having to REVOKE EXECUTE on the alternative-name function
(pg_logfile_rotate()), meaning that in any installations with adminpack
on 9.6 and higher, any user is able to run the pg_logfile_rotate()
function, which then calls pg_rotate_logfile() and rotates the logfile.
Fix by adding a new version of adminpack (1.1) which handles the REVOKE.
As this function should have only been available to the superuser, this
is a security issue, albeit a minor one.
In HEAD, move the changes implemented for adminpack up to be adminpack
2.0 instead of 1.1.
Security: CVE-2018-1115
Robert Haas [Mon, 7 May 2018 13:48:47 +0000 (09:48 -0400)]
Documentation updates for partitioning.
Takayuki Tsunakawa
Discussion: http://postgr.es/m/
0A3221C70F24FB45833433255569204D1F965627@G01JPEXMBYT05
Peter Eisentraut [Mon, 7 May 2018 00:10:05 +0000 (20:10 -0400)]
Tom Lane [Sun, 6 May 2018 19:30:44 +0000 (15:30 -0400)]
Release notes for 10.4, 9.6.9, 9.5.13, 9.4.18, 9.3.23.
Andrew Dunstan [Sun, 6 May 2018 11:37:05 +0000 (07:37 -0400)]
Clear severity 5 perlcritic warnings from vcregress.pl
My recent update for python3 support used some idioms that are
unapproved. This fixes them. Backpatch to all live branches like the
original.
Tom Lane [Sat, 5 May 2018 20:23:07 +0000 (16:23 -0400)]
Fix bootstrap parser so that its keywords are unreserved words.
Mark Dilger pointed out that the bootstrap parser does not allow
any of its keywords to appear as column values unless they're quoted,
and proposed dealing with that by quoting such values in genbki.pl.
Looking closer, though, we also have that problem with respect to table,
column, and type names appearing in the .bki file: the parser would fail
if any of those matched any of its keywords. While so far there have
been no conflicts (that I've heard of), this seems like a booby trap
waiting to catch somebody. Rather than clutter genbki.pl with enough
quoting logic to handle all that, let's make the bootstrap parser grow
up a little bit and treat its keywords as unreserved.
Experimentation shows that it's fairly easy to do so with the exception
of _null_, which I don't have a big problem with keeping as a reserved
word. The only change needed is that we can't have the "close" command
take an optional table name: it has to either require or forbid the
table name to avoid shift/reduce conflicts. genbki.pl has historically
always included the table name, so I took that option.
The implementation has bootscanner.l passing forward the string value
of each keyword, in case bootparse.y needs that. This avoids needing to
know the precise spelling of each keyword in bootparse.y, which is good
because that's not always obvious from the token name.
Discussion: https://postgr.es/m/
3024FC91-DB6D-4732-B31C-
DF772DF039A0@gmail.com
Tom Lane [Sat, 5 May 2018 17:22:11 +0000 (13:22 -0400)]
Revert "Test conversion of NaN between float4 and float8."
This reverts commit
55e0e458170c76c1a0074cd550a13ec47e38a3fa.
It's served its purpose of demonstrating what was wrong on
buildfarm member opossum. We could consider putting some kind
of single-purpose hack into ftod() to make the test pass there;
but I don't think it's worth the trouble, since there are surely
many other places whether this platform bug could manifest.
Tom Lane [Sat, 5 May 2018 17:21:50 +0000 (13:21 -0400)]
Put in_range_float4_float8's work in-line.
In commit
8b29e88cd, I'd dithered about whether to make
in_range_float4_float8 be a standalone copy of the float in-range logic
or have it punt to in_range_float8_float8. I went with the latter, which
saves code space though at the cost of performance and readability.
However, it emerges that this tickles a compiler or hardware bug on
buildfarm member opossum. Test results from commit
55e0e4581 show
conclusively that widening a float4 NaN to float8 produces Inf, not NaN,
on that machine; which accounts perfectly for the window RANGE test
failures it's been showing. We can dodge this problem by making
in_range_float4_float8 be an independent function, so that it checks
for NaN inputs before widening them.
Ordinarily I'd not be very excited about working around such obviously
broken functionality; but given that this was a judgment call to begin
with, I don't mind reversing it.
Peter Eisentraut [Sat, 5 May 2018 14:51:38 +0000 (10:51 -0400)]
Remove extra newlines after PQerrorMessage()
Tom Lane [Fri, 4 May 2018 22:56:50 +0000 (18:56 -0400)]
First-draft release notes for 10.4.
As usual, the release notes for other branches will be made by cutting
these down, but put them up for community review first.
Heikki Linnakangas [Fri, 4 May 2018 22:34:53 +0000 (01:34 +0300)]
Fix scenario where streaming standby gets stuck at a continuation record.
If a continuation record is split so that its first half has already been
removed from the master, and is only present in pg_wal, and there is a
recycled WAL segment in the standby server that looks like it would
contain the second half, recovery would get stuck. The code in
XLogPageRead() incorrectly started streaming at the beginning of the
WAL record, even if we had already read the first page.
Backpatch to 9.4. In principle, older versions have the same problem, but
without replication slots, there was no straightforward mechanism to
prevent the master from recycling old WAL that was still needed by standby.
Without such a mechanism, I think it's reasonable to assume that there's
enough slack in how many old segments are kept around to not run into this,
or you have a WAL archive.
Reported by Jonathon Nelson. Analysis and patch by Kyotaro HORIGUCHI, with
some extra comments by me.
Discussion: https://www.postgresql.org/message-id/CACJqAM3xVz0JY1XFDKPP%2BJoJAjoGx%3DGNuOAshEDWCext7BFvCQ%40mail.gmail.com
Alvaro Herrera [Fri, 4 May 2018 18:24:44 +0000 (15:24 -0300)]
Don't mark pages all-visible spuriously
Dan Wood diagnosed a long-standing problem that pages containing tuples
that are locked by multixacts containing live lockers may spuriously end
up as candidates for getting their all-visible flag set. This has the
long-term effect that multixacts remain unfrozen; this may previously
pass undetected, but since commit XYZ it would be reported as
"ERROR: found multixact
134100944 from before relminmxid
192042633"
because when a later vacuum tries to freeze the page it detects that a
multixact that should have gotten frozen, wasn't.
Dan proposed a (correct) patch that simply sets a variable to its
correct value, after a bogus initialization. But, per discussion, it
seems better coding to avoid the bogus initializations altogether, since
they could give rise to more bugs later. Therefore this fix rewrites
the logic a little bit to avoid depending on the bogus initializations.
This bug was part of a family introduced in 9.6 by commit
a892234f830e;
later, commit
38e9f90a227d fixed most of them, but this one was
unnoticed.
Authors: Dan Wood, Pavan Deolasee, Álvaro Herrera
Reviewed-by: Masahiko Sawada, Pavan Deolasee, Álvaro Herrera
Discussion: https://postgr.es/m/
84EBAC55-F06D-4FBE-A3F3-
8BDA093CE3E3@amazon.com
Andrew Dunstan [Fri, 4 May 2018 19:22:48 +0000 (15:22 -0400)]
Provide for testing on python3 modules when under MSVC
This should have been done some years ago as promised in commit
c4dcdd0c2. However, better late than never.
Along the way do a little housekeeping, including using a simpler test
for the python version being tested, and removing a redundant subroutine
parameter. These changes only apply back to release 9.5.
Backpatch to all live releases.