== PostgreSQL Weekly News - September 30, 2018 ==

From: David Fetter <david(at)fetter(dot)org>
To: PostgreSQL Announce <pgsql-announce(at)postgresql(dot)org>
Subject: == PostgreSQL Weekly News - September 30, 2018 ==
Date: 2018-09-30 22:30:04
Message-ID: 20180930223004.GA15382@fetter.org
Views: Raw Message | Whole Thread | Download mbox
Thread:
Lists: pgsql-announce

== PostgreSQL Weekly News - September 30, 2018 ==

PGDay.IT 2019 will take place May 16th and May 17th in Bologna, Italy. The CfP
is open at https://2019.pgday.it/en/blog/cfp and the Call for Workshops is at
https://2019.pgday.it/en/blog/cfw until January 15, 2019.
https://2019.pgday.it/en/

pgDay Paris 2019 will be held in Paris, France on March 12, 2019
at 199bis rue Saint-Martin. The CfP is open until November 30, 2018.
http://2019.pgday.paris/callforpapers/

== PostgreSQL Product News ==

Ora2Pg 19.1, a tool for migrating Oracle databases to PostgreSQL, released.
http://ora2pg.darold.net/

PostGIS 2.5.0 the industry standard geographic information
system package for PostgreSQL, released.
http://postgis.net/2018/09/23/postgis-2.5.0/

== PostgreSQL Jobs for September ==

http://archives.postgresql.org/pgsql-jobs/2018-9/

== PostgreSQL Local ==

PostgresConf South Africa 2018 will take place in Johannesburg on October 9, 2018
https://postgresconf.org/conferences/SouthAfrica2018

PostgreSQL Conference Europe 2018 will be held on October 23-26, 2018 at the
Lisbon Marriott Hotel in Lisbon, Portugal.
https://2018.pgconf.eu/

2Q PGConf will be on December 4-5, 2018 in Chicago, IL.
http://www.2qpgconf.com/

PGConf.ASIA 2018 will take place on December 10-12, 2018 in Akihabara, Tokyo,
Japan.
http://www.pgconf.asia/EN/2018/

== PostgreSQL in the News ==

Planet PostgreSQL: http://planet.postgresql.org/

PostgreSQL Weekly News is brought to you this week by David Fetter

Submit news and announcements by Sunday at 3:00pm PST8PDT to david(at)fetter(dot)org(dot)

== Applied Patches ==

Tom Lane pushed:

- Fix failure in WHERE CURRENT OF after rewinding the referenced cursor. In a
case where we have multiple relation-scan nodes in a cursor plan, such as a
scan of an inheritance tree, it's possible to fetch from a given scan node,
then rewind the cursor and fetch some row from an earlier scan node. In such
a case, execCurrent.c mistakenly thought that the later scan node was still
active, because ExecReScan hadn't done anything to make it look not-active.
We'd get some sort of failure in the case of a SeqScan node, because the
node's scan tuple slot would be pointing at a HeapTuple whose t_self gets
reset to invalid by heapam.c. But it seems possible that for other relation
scan node types we'd actually return a valid tuple TID to the caller,
resulting in updating or deleting a tuple that shouldn't have been considered
current. To fix, forcibly clear the ScanTupleSlot in ExecScanReScan. Another
issue here, which seems only latent at the moment but could easily become a
live bug in future, is that rewinding a cursor does not necessarily lead to
*immediately* applying ExecReScan to every scan-level node in the plan tree.
Upper-level nodes will think that they can postpone that call if their child
node is already marked with chgParam flags. I don't see a way for that to
happen today in a plan tree that's simple enough for execCurrent.c's
search_plan_tree to understand, but that's one heck of a fragile assumption.
So, add some logic in search_plan_tree to detect chgParam flags being set on
nodes that it descended to/through, and assume that that means we should
consider lower scan nodes to be logically reset even if their ReScan call
hasn't actually happened yet. Per bug #15395 from Matvey Arye. This has been
broken for a long time, so back-patch to all supported branches. Discussion:
https://postgr.es/m/153764171023.14986.280404050547008575@wrigleys.postgresql.org
https://git.postgresql.org/pg/commitdiff/89b280e139c463c98eb33592216a123e89052d08

- Doc: warn against using parallel restore with --load-via-partition-root. This
isn't terribly safe, and making it so doesn't seem like a small project, so
for the moment just warn against it. Discussion:
https://postgr.es/m/13624.1535486019@sss.pgh.pa.us
https://git.postgresql.org/pg/commitdiff/73a60051379b35a0bec399edfe369c59e50cc775

- Fix over-allocation of space for array_out()'s result string. array_out
overestimated the space needed for its output, possibly by a very substantial
amount if the array is multi-dimensional, because of wrong order of operations
in the loop that counts the number of curly-brace pairs needed. While the
output string is normally short-lived, this could still cause problems in
extreme cases. An additional minor error was that it counted one more
delimiter than is actually needed. Repair those errors, add an Assert that
the space is now correctly calculated, and make some minor improvements in the
comments. I also failed to resist the temptation to get rid of an integer
modulus operation per array element; a simple comparison is sufficient. This
bug dates clear back to Berkeley days, so back-patch to all supported
versions. Keiichi Hirobe, minor additional work by me Discussion:
https://postgr.es/m/CAH=EFxE9W0tRvQkixR2XJRRCToUYUEDkJZk6tnADXugPBRdcdg@mail.gmail.com
https://git.postgresql.org/pg/commitdiff/87d9bbca13f9c6b8f6ee986f0e399cb83bd731d4

- Use ppoll(2), if available, to wait for input in pgbench. Previously, pgbench
always used select(2) for this purpose, but that's problematic for very high
client counts, because select() can't deal with file descriptor numbers larger
than FD_SETSIZE. It's pretty common for that to be only 1024 or so, whereas
modern OSes can allow many more open files than that. Using poll(2) would
surmount that problem, but it creates another one: poll()'s timeout resolution
is only 1ms, which is poor enough to cause problems with --rate specifications
approaching or exceeding 1K TPS. On platforms that have ppoll(2), which
includes Linux and recent FreeBSD, we can use that to avoid the FD_SETSIZE
problem without any loss of timeout resolution. Hence, add configure logic to
test for ppoll(), and use it if available. This patch introduces an
abstraction layer into pgbench that could be extended to support other kernel
event-wait APIs such as kevents. But actually adding such support is a matter
for some future patch. Doug Rady, reviewed by Robert Haas and Fabien Coelho,
and whacked around a good bit more by me Discussion:
https://postgr.es/m/23D017C9-81B7-484D-8490-FD94DEC4DF59@amazon.com
https://git.postgresql.org/pg/commitdiff/60e612b602999e670f2d57a01e52799eaa903ca9

- Sync our Snowball stemmer dictionaries with current upstream. We haven't
touched these since text search functionality landed in core in 2007 :-(.
While the upstream project isn't a beehive of activity, they do make additions
and bug fixes from time to time. Update our copies of these files. Also
update our documentation about how to keep things in sync, since they're not
making distribution tarballs these days. Fortunately, their source code turns
out to be a breeze to build. Notable changes: * The non-UTF8 version of the
hungarian stemmer now works in LATIN2 not LATIN1. * New stemmers have
appeared for arabic, indonesian, irish, lithuanian, nepali, and tamil. These
all work in UTF8, and the indonesian and irish ones also work in LATIN1.
(There are some new stemmers that I did not incorporate, mainly because their
names don't match the underlying languages, suggesting that they're not to be
considered mainstream.) Worth noting: the upstream Nepali dictionary was
contributed by Arthur Zakirov. initdb forced because the contents of
snowball_create.sql have changed. Still TODO: see about updating the stopword
lists. Arthur Zakirov, minor mods and doc work by me Discussion:
https://postgr.es/m/20180626122025.GA12647@zakirov.localdomain Discussion:
https://postgr.es/m/20180219140849.GA9050@zakirov.localdomain
https://git.postgresql.org/pg/commitdiff/fd582317e10e26083b8c720598bfcdbf89787112

- Avoid unnecessary precision loss for pgbench's --rate target. It's fairly
silly to truncate the throttle_delay to integer when the only math we ever do
with it requires converting back to double. Furthermore, given that people
are starting to complain about restrictions like only supporting 1K client
connections, I don't think we're very far away from situations where the
precision loss matters. As the code stood, for example, there's no difference
between --rate 100001 and --rate 111111; both get converted to throttle_delay
= 9. Somebody trying to run 100 threads and have each one dispatch around 1K
TPS would find this lack of precision rather surprising, especially since the
required per-thread delays are around 1ms, well within the timing precision of
modern systems.
https://git.postgresql.org/pg/commitdiff/5b7e036707ccd93506731da82a56b07023d13e30

- Make some fixes to allow building Postgres on macOS 10.14 ("Mojave"). Apple's
latest rearrangements of the system-supplied headers have broken building of
PL/Perl and PL/Tcl. The only practical way to fix PL/Tcl is to start using
the "-isysroot" compiler flag to point to SDK-supplied headers, as Apple
expects. We must also start distinguishing where to find Perl's headers from
where to find its shared library; but that seems like good cleanup anyway.
Extensions that formerly did something like -I$(perl_archlibexp)/CORE should
now do -I$(perl_includedir)/CORE instead. perl_archlibexp is still the place
to look for libperl.so, though. If for some reason you don't like the default
-isysroot setting, you can override that by setting PG_SYSROOT in configure's
arguments. I don't currently think people would need to do so, unless maybe
for cross-version build purposes. In addition, teach configure where to find
tclConfig.sh. Our traditional method of searching $auto_path hasn't worked
for the last couple of macOS releases, and it now seems clear that Apple's not
going to change that. The workaround of manually specifying --with-tclconfig
was annoying already, but Mojave's made it a lot more so because the sysroot
path now has to be included as well. Let's just wire the knowledge into
configure instead. To avoid breaking builds against non-default Tcl
installations (e.g. MacPorts) wherein the $auto_path method probably still
works, arrange to try the additional case only after all else has failed.
Back-patch to all supported versions, since at least the buildfarm cares about
that. The changes are set up to not do anything on macOS releases that are
old enough to not have functional sysroot trees.
https://git.postgresql.org/pg/commitdiff/5e22171310f8d7c82219a6b978440e5144e88683

- Convert elog.c's useful_strerror() into a globally-used strerror wrapper.
elog.c has long had a private strerror wrapper that handles assorted possible
failures or deficiencies of the platform's strerror. On Windows, it also
knows how to translate Winsock error codes, which the native strerror does
not. Move all this code into src/port/strerror.c and define strerror() as a
macro that invokes it, so that both our frontend and backend code will have
all of this behavior. I believe this constitutes an actual bug fix on
Windows, since AFAICS our frontend code did not report Winsock error codes
properly before this. However, the main point is to lay the groundwork for
implementing %m in src/port/snprintf.c: the behavior we want %m to have is
this one, not the native strerror's. Note that this throws away the prior use
of src/port/strerror.c, which was to implement strerror() on platforms lacking
it. That's been dead code for nigh twenty years now, since strerror() was
already required by C89. We should likewise cause strerror_r to use this
behavior, but I'll tackle that separately. Patch by me, reviewed by Michael
Paquier Discussion: https://postgr.es/m/2975.1526862605@sss.pgh.pa.us
https://git.postgresql.org/pg/commitdiff/26e9d4d4ef16b5e2be96319f89ea6ba7f63a4d73

- Always use our own versions of *printf(). We've spent an awful lot of effort
over the years in coping with platform-specific vagaries of the *printf family
of functions. Let's just forget all that mess and standardize on always using
src/port/snprintf.c. This gets rid of a lot of configure logic, and it will
allow a saner approach to dealing with %m (though actually changing that is
left for a follow-on patch). Preliminary performance testing suggests that as
it stands, snprintf.c is faster than the native printf functions for some
tasks on some platforms, and slower for other cases. A pending patch will
improve that, though cases with floating-point conversions will doubtless
remain slower unless we want to put a *lot* of effort into that. Still, we've
not observed that *printf is really a performance bottleneck for most
workloads, so I doubt this matters much. Patch by me, reviewed by Michael
Paquier Discussion: https://postgr.es/m/2975.1526862605@sss.pgh.pa.us
https://git.postgresql.org/pg/commitdiff/96bf88d52711ad3a0a4cc2d1d9cb0e2acab85e63

- Implement %m in src/port/snprintf.c, and teach elog.c to rely on that. I
started out with the idea that we needed to detect use of %m format specs in
contexts other than elog/ereport calls, because we couldn't rely on that
working in *printf calls. But a better answer is to fix things so that it
does work. Now that we're using snprintf.c all the time, we can implement %m
in that and we've fixed the problem. This requires also adjusting our various
printf-wrapping functions so that they ensure "errno" is preserved when they
call snprintf.c. Remove elog.c's handmade implementation of %m, and let it
rely on snprintf to support the feature. That should provide some performance
gain, though I've not attempted to measure it. There are a lot of places
where we could now simplify 'printf("%s", strerror(errno))' into
'printf("%m")', but I'm not in any big hurry to make that happen. Patch by
me, reviewed by Michael Paquier Discussion:
https://postgr.es/m/2975.1526862605@sss.pgh.pa.us
https://git.postgresql.org/pg/commitdiff/d6c55de1f99a9028540516316b95321a7b12a540

- Fix link failures due to snprintf/strerror changes. snprintf.c requires
isnan(), which requires -lm on some platforms. libpq never bothered with -lm
before, but now it needs it. strerror.c tries to translate a string or two,
which requires -lintl. We'd managed never to need that anywhere in
ecpg/pgtypeslib/ before, but now we do. Per buildfarm and a report from Peter
Eisentraut. Discussion:
https://postgr.es/m/20180926190934.ea4xvzhkayuw7gkx@alap3.anarazel.de
Discussion:
https://postgr.es/m/f67b5008-9f01-057f-2bff-558cb53af851@2ndquadrant.com
https://git.postgresql.org/pg/commitdiff/a6b88d682cbec73474a73c9782fb7096e9440a8b

- Clean up *printf macros to avoid conflict with format archetypes. We must
define the macro "printf" with arguments, else it can mess up format archetype
attributes in builds where PG_PRINTF_ATTRIBUTE is just "printf". Fortunately,
that's easy to do now that we're requiring C99; we can use __VA_ARGS__. On
the other hand, it's better not to use __VA_ARGS__ for the rest of the *printf
crew, so that one can take the addresses of those functions without surprises.
I'd proposed doing this some time ago, but forgot to make it happen; buildfarm
failures subsequent to 96bf88d52 reminded me. Discussion:
https://postgr.es/m/22709.1535135640@sss.pgh.pa.us Discussion:
https://postgr.es/m/20180926190934.ea4xvzhkayuw7gkx@alap3.anarazel.de
https://git.postgresql.org/pg/commitdiff/8b91d258844afa58e856ac354f9ba9745ff9ffb2

- Try another way to detect the result type of strerror_r(). The method we've
traditionally used, of redeclaring strerror_r() to see if the compiler
complains of inconsistent declarations, turns out not to work reliably because
some compilers only report a warning, not an error. Amazingly, this has gone
undetected for years, even though it certainly breaks our detection of whether
strerror_r succeeded. Let's instead test whether the compiler will take the
result of strerror_r() as a switch() argument. It's possible this won't work
universally either, but it's the best idea I could come up with on the spur of
the moment. We should probably back-patch this once the dust settles, but
first let's see what the buildfarm thinks of it. Discussion:
https://postgr.es/m/10877.1537993279@sss.pgh.pa.us
https://git.postgresql.org/pg/commitdiff/751f532b9766fb5d3c334758abea95b7bb085c5a

- Fix another portability issue from commit 758ce9b77. strerror.c now requires
strlcpy() in some cases, and a couple of the ecpg libraries did not have that
at hand. Pull it in from src/port/ following the usual recipe. Per
buildfarm.
https://git.postgresql.org/pg/commitdiff/ce4887bd025b95c7b455fefd817a418844c6aad3

- Incorporate strerror_r() into src/port/snprintf.c, too. This provides the
features that used to exist in useful_strerror() for users of strerror_r(),
too. Also, standardize on the GNU convention that strerror_r returns a char
pointer that may not be NULL. I notice that libpq's win32.c contains a
variant version of strerror_r that probably ought to be folded into
strerror.c. But lacking a Windows environment, I should leave that to
somebody else. Discussion: https://postgr.es/m/2975.1526862605@sss.pgh.pa.us
https://git.postgresql.org/pg/commitdiff/758ce9b7794845f95473c569155d29fcf0e2751b

- Fix assorted bugs in pg_get_partition_constraintdef(). It failed if passed a
nonexistent relation OID, or one that was a non-heap relation, because of
blindly applying heap_open to a user-supplied OID. This is not OK behavior
for a SQL-exposed function; we have a project policy that we should return
NULL in such cases. Moreover, since pg_get_partition_constraintdef ought now
to work on indexes, restricting it to heaps is flat wrong anyway. The
underlying function generate_partition_qual() wasn't on board with indexes
having partition quals either, nor for that matter with rels having
relispartition set but yet null relpartbound. (One wonders whether the person
who wrote the function comment blocks claiming that these functions allow a
missing relpartbound had ever tested it.) Fix by testing relispartition before
opening the rel, and by using relation_open not heap_open. (If any other
relkinds ever grow the ability to have relispartition set, the code will work
with them automatically.) Also, don't reject null relpartbound in
generate_partition_qual. Back-patch to v11, and all but the null-relpartbound
change to v10. (It's not really necessary to change generate_partition_qual
at all in v10, but I thought s/heap_open/relation_open/ would be a good idea
anyway just to keep the code in sync with later branches.) Per report from
Justin Pryzby. Discussion:
https://postgr.es/m/20180927200020.GJ776@telsasoft.com
https://git.postgresql.org/pg/commitdiff/aaf10f32a308bc5f53772c773edf3f345f59bb74

- Build src/port files as a library with -fPIC, and use that in libpq. libpq
and ecpg need shared-library-friendly versions of assorted src/port/ and
src/common/ modules. Up to now, they got those by symlinking the individual
source files and compiling them locally. That's baroque, and a pain to
maintain, and it results in some amount of duplicated compile work. It
might've made sense when only a couple of files were needed, but the list has
grown and grown and grown :-( It makes more sense to have the originating
directory build a third variant of libpgport.a/libpgcommon.a containing
modules built with $(CFLAGS_SL), and just link that into the shared library.
Unused files won't get linked, so the end result should be the same. This
patch makes a down payment on that idea by having src/port/ build such a
library and making libpq use it. If the buildfarm doesn't expose fatal
problems with the approach, I'll extend it to the other cases. Discussion:
https://postgr.es/m/13022.1538003440@sss.pgh.pa.us
https://git.postgresql.org/pg/commitdiff/ea53100d5671b5b243f77898b0b04d23c38b2820

- Remove pqsignal() from libpq's official exports list. Client applications
should get this function, if they need it, from libpgport. The fact that it's
exported from libpq is a hack left over from before we set up libpgport. It's
never been documented, and there's no good reason for non-PG code to be
calling it anyway, so hopefully this won't cause any problems. Moreover, with
the previous setup it was not real clear whether our clients that use the
function were getting it from libpgport or libpq, so this might actually
prevent problems. The reason for changing it now is that in the wake of
commit ea53100d5, some linkers won't export the symbol, apparently because
it's coming from a .a library instead of a .o file. We could get around that
by continuing to symlink pqsignal.c into libpq as before; but unless somebody
complains very hard, I don't want to adopt such a kluge. Discussion:
https://postgr.es/m/13022.1538003440@sss.pgh.pa.us Discussion:
https://postgr.es/m/E1g5Y8r-0006vs-QA@gemulon.postgresql.org
https://git.postgresql.org/pg/commitdiff/f7ab802855200df5529a6e1e7b748d7926acace8

- Build src/common files as a library with -fPIC. Build a third version of
libpgcommon.a, with -fPIC and -DFRONTEND, as commit ea53100d5 did for
src/port. Use that in libpq to avoid symlinking+rebuilding source files
retail. Also adjust ecpg to use the new src/port and src/common libraries.
Arrange to install these libraries, too, to simplify out-of-tree builds of
shared libraries that need any of these modules. Discussion:
https://postgr.es/m/13022.1538003440@sss.pgh.pa.us Discussion:
https://postgr.es/m/E1g5Y8r-0006vs-QA@gemulon.postgresql.org
https://git.postgresql.org/pg/commitdiff/7143b3e82136d2941b3394168940d895a29b4f36

- Tweak MSVC build system to match changes in 7143b3e82. Also try to make the
comment suggesting that this might be needed more intelligible. Per
buildfarm.
https://git.postgresql.org/pg/commitdiff/97c6852ff7c54d5b44426ceae9e3215d13157c10

- Tweak MSVC build system to match changes in 7143b3e82. Looks like we need to
pull in $libpgcommon in a couple more places than before. Per buildfarm.
https://git.postgresql.org/pg/commitdiff/61f14cc8c85b5e6186c3b86c2c929821d7b33589

- Improve error reporting for unsupported effective_io_concurrency setting.
Give a specific error complaining about lack of posix_fadvise() when someone
tries to set effective_io_concurrency > 0 on platforms without that. This
probably isn't worth extensive back-patching, but I (tgl) felt cramming it
into v11 was reasonable. James Robinson Discussion:
https://postgr.es/m/153771876450.14994.560017943128223619@wrigleys.postgresql.org
Discussion:
https://postgr.es/m/A3942987-5BC7-4F05-B54D-2A0EC2914B33@jlr-photo.com
https://git.postgresql.org/pg/commitdiff/2b04dfc4724970231ac338aa71e529c823fc5ff6

- Create an RTE field to record the query's lock mode for each relation. Add
RangeTblEntry.rellockmode, which records the appropriate lock mode for each
RTE_RELATION rangetable entry (either AccessShareLock, RowShareLock, or
RowExclusiveLock depending on the RTE's role in the query). This patch
creates the field and makes all creators of RTE nodes fill it in reasonably,
but for the moment nothing much is done with it. The plan is to replace
assorted post-parser logic that re-determines the right lockmode to use with
simple uses of rte->rellockmode. For now, just add Asserts in each of those
places that the rellockmode matches what they are computing today. (In some
cases the match isn't perfect, so the Asserts are weaker than you might
expect; but this seems OK, as per discussion.) This passes check-world for me,
but it seems worth pushing in this state to see if the buildfarm finds any
problems in cases I failed to test. catversion bump due to change of stored
rules. Amit Langote, reviewed by David Rowley and Jesper Pedersen, and
whacked around a bit more by me Discussion:
https://postgr.es/m/468c85d9-540e-66a2-1dde-fec2b741e688@lab.ntt.co.jp
https://git.postgresql.org/pg/commitdiff/fdba460a26af919c0b366755d119f384706e670a

Noah Misch pushed:

- Initialize random() in bootstrap/stand-alone postgres and in initdb. This
removes a difference between the standard IsUnderPostmaster execution
environment and that of --boot and --single. In a stand-alone backend,
"SELECT random()" always started at the same seed. On a system capable of
using posix shared memory, initdb could still conclude "selecting dynamic
shared memory implementation ... sysv". Crashed --boot or --single postgres
processes orphaned shared memory objects having names that collided with the
not-actually-random names that initdb probed. The sysv fallback appeared
after ten crashes of --boot or --single postgres. Since --boot and --single
are rare in production use, systems used for PostgreSQL development are the
principal candidate to notice this symptom. Back-patch to 9.3 (all supported
versions). PostgreSQL 9.4 introduced dynamic shared memory, but 9.3 does
share the "SELECT random()" problem. Reviewed by Tom Lane and Kyotaro
HORIGUCHI. Discussion:
https://postgr.es/m/20180915221546.GA3159382@rfd.leadboat.com
https://git.postgresql.org/pg/commitdiff/d18f6674bd60e923bcdbf0fd916685b0a250c60f

Joe Conway pushed:

- Document aclitem functions and operators. aclitem functions and operators
have been heretofore undocumented. Fix that. While at it, ensure the
non-operator aclitem functions have pg_description strings. Does not seem
worthwhile to back-patch. Author: Fabien Coelho, with pg_description from
John Naylor, and significant refactoring and editorialization by me. Reviewed
by: Tom Lane Discussion:
https://postgr.es/m/flat/alpine.DEB.2.21.1808010825490.18204%40lancre
https://git.postgresql.org/pg/commitdiff/c62dd80cdf149e2792b13c13777a539f5abb0370

Andrew Dunstan pushed:

- Fast default trigger and expand_tuple fixes. Ensure that triggers get
properly filled in tuples for the OLD value. Also fix the logic of detecting
missing null values. The previous logic failed to detect a missing null column
before the first missing column with a default. Fixing this has simplified the
logic a bit. Regression tests are added to test changes. This should ensure
better coverage of expand_tuple(). Original bug reports, and some code and
test scripts from Tomas Vondra Backpatch to release 11.
https://git.postgresql.org/pg/commitdiff/7636e5c60fea83a9f3cd2ad278c0819b98941c74

Andres Freund pushed:

- Make EXPLAIN output for JIT compilation more dense. A discussion about also
reporting JIT compilation overhead on workers brought unhappiness with the
verbosity of the current explain format to light. Make the text format more
dense, and restructure the structured output to mirror that more closely. As
we're re-jiggering the output format anyway: The denser format allows us to
report all flags for JIT compilation (now also reporting PGJIT_EXPR and
PGJIT_DEFORM), and report the total time in addition to the individual times.
Per complaint from Tom Lane. Author: Andres Freund Discussion:
https://postgr.es/m/27812.1537221015@sss.pgh.pa.us Backpatch: 11-, where JIT
compilation was introduced
https://git.postgresql.org/pg/commitdiff/52050ad8ebec8d831902f587314aa4f6aaa6d2c5

- auto_explain: Include JIT information if applicable. Due to my (Andres')
omission auto_explain did not include information about JIT compilation. Fix
that. Author: Lukas Fittl Discussion:
https://postgr.es/m/CAP53PkzgSyoTCau0-5FNaM484B=uO8nLzma7L1ncWLb1=oVJQA@mail.gmail.com
Backpatch: 11-, where JIT compilation was introduced
https://git.postgresql.org/pg/commitdiff/b076eb7669d7279d0f446305c2e12dffd6bc3347

- Collect JIT instrumentation from workers. Previously, when using parallel
query, EXPLAIN (ANALYZE)'s JIT compilation timings did not include the
overhead from doing so on the workers. Fix that. We do so by simply
aggregating the cost of doing JIT compilation on workers and the leader
together. Arguably that's not quite accurate, because the total time spend
doing so is spent in parallel - but it's hard to do much better. For
additional detail, when VERBOSE is specified, the stats for workers are
displayed separately. Author: Amit Khandekar and Andres Freund Discussion:
https://postgr.es/m/CAJ3gD9eLrz51RK_gTkod+71iDcjpB_N8eC6vU2AW-VicsAERpQ@mail.gmail.com
Backpatch: 11-
https://git.postgresql.org/pg/commitdiff/33001fd7a7072d483272115a9376478fdc007fb9

- Change TupleTableSlot->tts_nvalid to type AttrNumber. Previously it was an
int / 4 bytes. The maximum number of attributes in a tuple is restricted by
the maximum value Var->varattno, which is an AttrNumber/int16. Hence use the
same data type for TupleTableSlot->tts_nvalid. Author: Ashutosh Bapat
Discussion:
https://postgr.es/m/20180220224318.gw4oe5jadhpmcdnm@alap3.anarazel.de
https://git.postgresql.org/pg/commitdiff/a598708ffa8eb72a22eeee4e6f30bc26e4984acd

- Remove function list from prologue of execTuples.c. That section is never in
sync with the actual routines available and their functionality. Author:
Ashutosh Bapat Discussion:
https://postgr.es/m/20180220224318.gw4oe5jadhpmcdnm@alap3.anarazel.de
https://git.postgresql.org/pg/commitdiff/bbdfbb9154fccf5b58ecbbdf4e8989e2fed206f8

- Split ExecStoreTuple into ExecStoreHeapTuple and ExecStoreBufferHeapTuple.
Upcoming changes introduce further types of tuple table slots, in preparation
of making table storage pluggable. New storage methods will have different
representation of tuples, therefore the slot accessor should refer explicitly
to heap tuples. Instead of just renaming the functions, split it into one
function that accepts heap tuples not residing in buffers, and one accepting
ones in buffers. Previously one function was used for both, but that was a
bit awkward already, and splitting will allow us to represent slot types for
tuples in buffers and normal memory separately. This is split out from the
patch introducing abstract slots, as this largely consists out of mechanical
changes. Author: Ashutosh Bapat Reviewed-By: Andres Freund Discussion:
https://postgr.es/m/20180220224318.gw4oe5jadhpmcdnm@alap3.anarazel.de
https://git.postgresql.org/pg/commitdiff/29c94e03c7d05d2b29afa1de32795ce178531246

- Remove absolete function TupleDescGetSlot(). TupleDescGetSlot() was kept
around for backward compatibility for user-written SRFs. With the
TupleTableSlot abstraction work, that code will need to be version specific
anyway, so there's no point in keeping the function around any longer.
Author: Ashutosh Bapat Reviewed-By: Andres Freund Discussion:
https://postgr.es/m/20180220224318.gw4oe5jadhpmcdnm@alap3.anarazel.de
https://git.postgresql.org/pg/commitdiff/10763358c3f0df48d2ae39b49b0c93be149cceab

- Clean up in the wake of TupleDescGetSlot() removal / 10763358c3f. The
previous commit wasn't careful enough to remove all traces of
TupleDescGetSlot(). Besides fixing the oversight of not removing
TupleDescGetSlot()'s declaration, this also removes FuncCallContext->slot.
That was documented to be for use in combination with TupleDescGetSlot(), a
cursory search over extensions finds no users, and there doesn't seem to be
convincing reasons to keep it around. If we later in the v12 release cycle
find users, we can re-consider this part of the commit. Reported-By: Michael
Paquier Discussion: https://postgr.es/m/20180926000413.GC1659@paquier.xyz
https://git.postgresql.org/pg/commitdiff/27e082b0c6e564facfbf54b56090fdcc4bf44cca

- Correct overflow handling in pgbench. This patch attempts, although it's
quite possible there are a few holes, to properly detect and reported signed
integer overflows in pgbench. Author: Fabien Coelho Reviewed-By: Andres
Freund Discussion:
https://postgr.es/m/20171212052943.k2hlckfkeft3eiio@alap3.anarazel.de
https://git.postgresql.org/pg/commitdiff/92a0342a90b38b0b007f079d33286f9aefabfe40

Michaël Paquier pushed:

- Revoke pg_stat_statements_reset() permissions. Commit 25fff40 has granted
execute permission of the function pg_stat_statements_reset() to default role
"pg_read_all_stats", but this role is meant to read statistics, and not to
reset them. The permissions on this function are revoked from
"pg_read_all_stats". The version of pg_stat_statements is bumped up in
consequence. Author: Haribabu Kommi Reviewed-by: Michael Paquier, Amit Kapila
Discussion:
https://postgr.es/m/CAJrrPGf5fCnKqXObpwGN9nMyD--tzOf-7LFCJiz59Z1wJ5qj9A@mail.gmail.com
https://git.postgresql.org/pg/commitdiff/edb9797660541b217d23ae7c02b96b496d34fec4

- Ignore publication tables when --no-publications is used. 96e1cb4 has added
support for --no-publications in pg_dump, pg_dumpall and pg_restore, but
forgot the fact that publication tables also need to be ignored when this
option is used. Author: Gilles Darold Reviewed-by: Michael Paquier
Discussion:
https://postgr.es/m/3f48e812-b0fa-388e-2043-9a176bdee27e@dalibo.com
Backpatch-through: 10, where publications have been added.
https://git.postgresql.org/pg/commitdiff/08c9917e24683e36dca35201723e47cdc3fa62db

- Rework activation of commit timestamps during recovery. The activation and
deactivation of commit timestamp tracking has not been handled consistently
for a primary or standbys at recovery. The facility can be activated at three
different moments of recovery: - The beginning, where a primary would use the
GUC value for the decision-making, and where a standby relies on the contents
of the control file. - When replaying a XLOG_PARAMETER_CHANGE record at redo.
- The end, where both primary and standby rely on the GUC value. Using the
GUC value for a primary at the beginning of recovery causes problems with
commit timestamp access when doing crash recovery. Particularly, when
replaying transaction commits, it could be possible that an attempt to read
commit timestamps is done for a transaction which committed at a moment when
track_commit_timestamp was disabled. A test case is added to reproduce the
failure. The test works down to v11 as it takes advantage of transaction
commits within procedures. Reported-by: Hailong Li Author: Masahiko Sawasa,
Michael Paquier Reviewed-by: Kyotaro Horiguchi Discussion:
https://postgr.es/m/11224478-a782-203b-1f17-e4797b39bdf0@qunar.com
Backpatch-through: 9.5, where commit timestamps have been introduced.
https://git.postgresql.org/pg/commitdiff/8d28bf500f6536e295e9c3d7b85cdfec1c4dc913

- Add basic regression tests for default monitoring roles. The following
default roles gain some coverage: - pg_read_all_stats - pg_read_all_settings
Author: Alexandra Ryzhevich Discussion:
https://postgr.es/m/CAOt4E5S5WJmDc9YpS1BfyAMQ5C1NEmiYynD6nUz42qVxphqkpA@mail.gmail.com
https://git.postgresql.org/pg/commitdiff/f535d5f0c13cb48d85565017e7d56f2075c59978

- Switch flags tracking pending interrupts to sig_atomic_t. Those previously
used bool, which should be safe on any modern platforms, however the C
standard is clear that it is better to use sig_atomic_t for variables
manipulated in signal handlers. This commit adds at the same time PGDLLIMPORT
to ClientConnectionLost. Author: Michael Paquier Reviewed-by: Tom Lane, Chris
Travers, Andres Freund Discussion:
https://postgr.es/m/20180925011311.GD1354@paquier.xyz
https://git.postgresql.org/pg/commitdiff/ba16aade337b16028d1e9e156d83417097c13817

- Fix WAL recycling on standbys depending on archive_mode. A restart point or a
checkpoint recycling WAL segments treats segments marked with neither ".done"
(archiving is done) or ".ready" (segment is ready to be archived) in
archive_status the same way for archive_mode being "on" or "always". While
for a primary this is fine, a standby running a restart point with
archive_mode = on would try to mark such a segment as ready for archiving,
which is something that will never happen except after the standby is
promoted. Note that this problem applies only to WAL segments coming from the
local pg_wal the first time archive recovery is run. Segments part of a
self-contained base backup are the most common case where this could happen,
however even in this case normally the .done markers would be most likely part
of the backup. Segments recovered from an archive are marked as .ready or
.done by the startup process, and segments finished streaming are marked as
such by the WAL receiver, so they are handled already. Reported-by: Haruka
Takatsuka Author: Michael Paquier Discussion:
https://postgr.es/m/15402-a453c90ed4cf88b2@postgresql.org Backpatch-through:
9.5, where archive_mode = always has been added.
https://git.postgresql.org/pg/commitdiff/78ea8b5daab9237fd42d7a8a836c1c451765499f

Thomas Munro pushed:

- Constify dsa_size_class_map and use a better type. Author: Mark G
Reviewed-by: Tom Lane Discussion:
https://postgr.es/m/CAEeOP_Zy_FvVwcAU0UX9nkOhnoR5KN%3D0B6LWX_kv0ZuSc4wbGw%40mail.gmail.com
https://git.postgresql.org/pg/commitdiff/64171b32069adcce7f57840143eaca9fbe28ba7e

Álvaro Herrera pushed:

- Remove fmgr.h inclusion from partition.h. It's not needed anymore.
https://git.postgresql.org/pg/commitdiff/62e533d3f129b59794c256eabad44011c9d2b951

- Remove obsolete comment. The documented shortcoming was actually fixed in
4c728f3829 so the comment is not true anymore.
https://git.postgresql.org/pg/commitdiff/5913b9bbf351b421141b300e37752e9ab8d85163

Tomáš Vondra:

- Improve test coverage of geometric types. This commit significantly increases
test coverage of geo_ops.c, adding tests for various issues addressed by
2e2a392de3 (which went undetected for a long time, at least partially due to
not being covered). This also removes alternative results expecting -0 on
some platforms. Instead the functions are should return the same results
everywhere, transforming -0 to 0 if needed. The tests are added to
geometric.sql file, sorted by the left hand side of the operators. There are
many cross datatype operators, so this seems like the best solution. Author:
Emre Hasegeli Reviewed-by: Tomas Vondra Discussion:
https://www.postgresql.org/message-id/CAE2gYzxF7-5djV6-cEvqQu-fNsnt%3DEqbOURx7ZDg%2BVv6ZMTWbg%40mail.gmail.com
https://git.postgresql.org/pg/commitdiff/a3d2844852dc664718320b15cbc6d6bfa264e66e

- Fix problems in handling the line data type. According to the source history,
the internal format of line data type has changed, but various functions
working with it did were not updated and thus were producing wrong results.
This patch addresses various such issues, in particular: * Reject invalid
specification A=B=0 on receive * Reject same points on line_construct_pp() *
Fix perpendicular operator when negative values are involved * Avoid division
by zero on perpendicular operator * Fix intersection and distance operators
when neither A nor B are 1 * Return NULL for closest point when objects are
parallel * Check whether closest point of line segments is the intersection
point * Fix closest point of line segments being on the wrong segment Aside
from handling those issues, the patch also aims to make operators more
symmetric and less sen to precision loss. The EPSILON interferes with even
minor changes, but the least we can do is applying it to both sides of the
operators equally. Author: Emre Hasegeli Reviewed-by: Tomas Vondra
Discussion:
https://www.postgresql.org/message-id/CAE2gYzxF7-5djV6-cEvqQu-fNsnt%3DEqbOURx7ZDg%2BVv6ZMTWbg%40mail.gmail.com
https://git.postgresql.org/pg/commitdiff/2e2a392de391a9f4ef4221fccbd00c43ba5c9b40

Peter Eisentraut pushed:

- Update dummy CREATE ASSERTION grammar. While we are probably still far away
from fully implementing assertions, all patch proposals appear to take issue
with the existing dummy grammar CREATE/DROP ASSERTION productions, so update
those a little bit. Rename the rule, use any_name instead of name, and remove
some unused code. Also remove the production for DROP ASSERTION, since that
would most likely be handled via the generic DROP support. extracted from a
patch by Joe Wildish
https://git.postgresql.org/pg/commitdiff/a49ceda6a044c2fc104b3d1397fe0bef8679d1aa

- Recurse to sequences on ownership change for all relkinds. When a table
ownership is changed, we must apply that also to any owned sequences.
(Otherwise, it would result in a situation that cannot be restored, because
linked sequences must have the same owner as the table.) But this was
previously only applied to regular tables and materialized views. But it
should also apply to at least foreign tables. This patch removes the relkind
check altogether, because it doesn't save very much and just introduces the
possibility of similar omissions. Bug: #15238 Reported-by: Christoph Berg
<christoph(dot)berg(at)credativ(dot)de>
https://git.postgresql.org/pg/commitdiff/0320ddaf3c08ea17d616549d0e7f45239592fc76

Alexander Korotkov pushed:

- Remove extra usage of BoxPGetDatum() macro. Author: Mark Dilger Discussion:
https://postgr.es/m/B2AEFCD0-836D-4654-9D59-3DF616E0A6F3%40gmail.com
https://git.postgresql.org/pg/commitdiff/0f6459589494a4b4ff6c707594f8d308b9da88f8

- Minor formatting cleanup for 2a6368343f.
https://git.postgresql.org/pg/commitdiff/4ec90f53f10141867d8b86f58d72990a13ff267b

Amit Kapila pushed:

- Fix assertion failure when updating full_page_writes for checkpointer. When
the checkpointer receives a SIGHUP signal to update its configuration, it may
need to update the shared memory for full_page_writes and need to write a WAL
record for it. Now, it is quite possible that the XLOG machinery has not been
initialized by that time and it will lead to assertion failure while doing
that. Fix is to allow the initialization of the XLOG machinery outside
critical section. This bug has been introduced by the commit 2c03216d83 which
added the XLOG machinery initialization in RecoveryInProgress code path.
Reported-by: Dilip Kumar Author: Dilip Kumar Reviewed-by: Michael Paquier and
Amit Kapila Backpatch-through: 9.5 Discussion:
https://postgr.es/m/CAFiTN-u4BA8KXcQUWDPNgaKAjDXC=C2whnzBM8TAcv=stckYUw@mail.gmail.com
https://git.postgresql.org/pg/commitdiff/a86bf6057edf7bc344f1ab6ba7824b561ed9068a

Stephen Frost pushed:

- Add application_name to connection authorized msg. The connection authorized
message has quite a bit of useful information in it, but didn't include the
application_name (when provided), so let's add that as it can be very useful.
Note that at the point where we're emitting the connection authorized message,
we haven't processed GUCs, so it's not possible to get this by using
log_line_prefix (which pulls from the GUC). There's also something to be said
for having this included in the connection authorized message and then not
needing to repeat it for every line, as having it in log_line_prefix would do.
The GUC cleans the application name to pure-ascii, so do that here too, but
pull out the logic for cleaning up a string into its own function in common
and re-use it from those places, and check_cluster_name which was doing the
same thing. Author: Don Seiler <don(at)seiler(dot)us> Discussion:
https://postgr.es/m/CAHJZqBB_Pxv8HRfoh%2BAB4KxSQQuPVvtYCzMg7woNR3r7dfmopw%40mail.gmail.com
https://git.postgresql.org/pg/commitdiff/8bddc864000f56d396621d4ad0f13e8e1872ddf5

== Pending Patches ==

Thomas Munro sent in two more revisions of a patch to enable SERIALIZABLE READ
ONLY DEFERRABLE for hot standbys.

Thomas Munro sent in another revision of a patch to implement a synchronous
replay mode for avoiding stale reads on hot standbys.

Andrey Borodin sent in another revision of a patch to add a GiST verification
function for amcheck.

Peter Eisentraut sent in a patch to clarify CREATE TABLESPACE documentation by
being more specific about when and how to create the directory and what
permissions it should have.

Elvis Pranskevichus sent in another revision of a patch to add and report a new
GUC: session_read_only. This GUC is reported via a ParameterStatus message.

Haribabu Kommi sent in a patch to revoke the pg_stat_statements_reset()
permissions from the pg_read_all_stats role, which shouldn't have had them in
the first place.

Haribabu Kommi sent in three more revisions of a patch to add parameters userid,
dbid and queryid to pg_stat_statements_reset().

Jim Nasby sent in a patch to remove is_wraparound and move the check for
anti-wraparound VACUUM from vacuum_rel() to lazy_vacuum_rel().

Pavan Deolasee sent in another revision of a patch to implement MERGE per
SQL:2016.

Thomas Munro sent in a patch to add DNS SRV support for LDAP authentication.

Thomas Munro sent in a patch to de-support and remove dsm_resize() and
dsm_remap().

Surafel Temesgen sent in another revision of a patch to add a PERCENT option to
FETCH FIRST.

Michaël Paquier sent in another revision of a patch to fix a bug in
track_commit_timestamp.

Dmitry Dolgov and Michaël Paquier traded patches to fix a bug that manifested as
a segfault when creating partition with a primary key and sql_drop trigger
exists.

Sergei Kornilov sent in another revision of a patch to refactor the
recovery.conf API.

David Rowley sent in another revision of a patch to calculate total_table_pages
after set_base_rel_sizes.

Richard Guo sent in another revision of a patch to implement predicate
propagation for non-equivalence clauses.

Haozhou Wang sent in another revision of a patch to implement disk quotas.

Amul Sul sent in a patch to add a 64-bit hash function for the hstore and citext
data types.

Fabien COELHO sent in another revision of a patch to add a pseudo-random
permutation function to pgbench.

Liudmila Mantrova sent in another revision of a patch to clarify the handling of
letters and digits in to_date() and to_timestamp().

Nikita Glukhov sent in another revision of a patch to implement kNN searches for
btree indexes.

Tom Lane and Daniel Gustafsson traded patches to add support for Secure
Transport SSL library on macOS as an alternative to OpenSSL.

Michael Banck sent in two more revisions of a patch to add online verification
of page checksums.

Tom Lane sent in another revision of a patch to speed up snprintf.

Michaël Paquier sent in a patch to refactor vacuum open.

Kyotaro HORIGUCHI sent in another revision of a patch to implement a
shared-memory based stats collector.

Thomas Munro sent in another revision of a patch to Use pread()/pwrite() instead
of lseek() + read()/write() in systems that have the former.

Nikita Glukhov sent in a patch to fix a memory leak in PLyObject_ToJsonbValue().

David Rowley sent in a patch to fix some incorrect comments and an outdated
README for run-time pruning.

Jimmy Yih sent in a patch to get a more consistent view definition when a UNION
subquery contains undecorated constants.

Peter Eisentraut sent in another revision of a patch to enable using file
cloning in pg_upgrade where available.

David Rowley and Amit Kapila traded patches to avoid locking range table
relations in the executor, remove some useless fields from planner nodes, prune
PlanRowMark of relations that are pruned from a plan, and revise executor range
table relation opening/closing.

Haribabu Kommi sent in another revision of a patch to move declaration of the
synchronize_seqscans GUC from src/backend/access/heap/heapam.c to
src/backend/access/table/tableam.c, add a check_default_table_access_method hook
to verify the access method, and validate the index scan hook addition.

Masahiko Sawada sent in a patch to fix how autovacuum is logged.

Edmund Horner sent in two more revisions of a patch to improve TID scanning by
adding support for range quals to estimating the cost of the path.

Haribabu Kommi sent in another revision of a patch to allow target_session_attrs
in libpq to accept a prefer-read option.

Thomas Munro sent in another revision of a patch to fix some corner case
problems with fsync.

Amit Khandekar sent in another revision of a patch to allocate a dedicated slot
for each partitions that requires it and slotify partition tuple conversion.

Peter Eisentraut sent in a patch to advance the transaction timestamp in
intra-procedure transactions.

David Rowley sent in two more revisions of a patch to fix an incorrect setting
of heap insert options for partitioned tables.

Michael Banck sent in another revision of a patch to add an option for progress
reporting to pg_verify_checksums.

Thomas Munro sent in two more revisions of a patch to add kqueue(2) support for
WaitEventSet.

Michaël Paquier sent in two more revisions of a patch to use durable_unlink for
.ready and .done files for WAL segment removal.

Andres Freund sent in another revision of a patch to remove abstime and things
that depend on it.

David Hedberg sent in a patch to add pipe support to pg_dump and pg_restore.

Pavel Stěhule sent in two more revisions of a patch to implement schema
variables.

Marco Atzeri sent in a patch to fix the Cygwin linking rules.

Andres Freund sent in a patch to remove WITH OIDs support and convert catalog
table oids to explicit oid columns.

Amit Kapila sent in another revision of a patch to fix datum serialization.

Dmitry Dolgov sent in another revision of a patch to add generic type
subscripting and use same for arrays and JSONB.

John Naylor sent in a patch to sync the ECPG scanner with core.

Tom Lane sent in two revisions of a patch to make executor relation handling
better by ensuring that the caller holds a lock *at least as strong* as the one
being recorded in the range table entry.

Tom Lane sent in a patch to fix a problem where relations are being opened
without any lock whatever.

Christoph Moench-Tegeder sent in a patch to implement pg_ls_archive_status().

Browse pgsql-announce by date

  From Date Subject
Next Message Laurenz Albe 2018-10-01 08:05:38 oracle_fdw 2.1.0 released
Previous Message Gilles Darold 2018-09-28 00:17:32 Ora2Pg v19.1 has been released