]> granicus.if.org Git - postgresql/log
postgresql
6 years agoAddress set of issues with errno handling
Michael Paquier [Mon, 25 Jun 2018 02:19:05 +0000 (11:19 +0900)]
Address set of issues with errno handling

System calls mixed up in error code paths are causing two issues which
several code paths have not correctly handled:
1) For write() calls, sometimes the system may return less bytes than
what has been written without errno being set.  Some paths were careful
enough to consider that case, and assumed that errno should be set to
ENOSPC, other calls missed that.
2) errno generated by a system call is overwritten by other system calls
which may succeed once an error code path is taken, causing what is
reported to the user to be incorrect.

This patch uses the brute-force approach of correcting all those code
paths.  Some refactoring could happen in the future, but this is let as
future work, which is not targeted for back-branches anyway.

Author: Michael Paquier
Reviewed-by: Ashutosh Sharma
Discussion: https://postgr.es/m/20180622061535.GD5215@paquier.xyz

6 years agodoc: adjust order of NUMERIC arguments to match syntax
Bruce Momjian [Sun, 24 Jun 2018 22:07:00 +0000 (18:07 -0400)]
doc:  adjust order of NUMERIC arguments to match syntax

Specifically, mention precision before scale

Reported-by: claytonjsalem@gmail.com
Discussion: https://postgr.es/m/152967566691.1268.1062965601465200209@wrigleys.postgresql.org

Backpatch-through: 9.3

6 years agodoc: show how interval's 3 unit buckets behave using EXTRACT()
Bruce Momjian [Sun, 24 Jun 2018 03:32:42 +0000 (23:32 -0400)]
doc:  show how interval's 3 unit buckets behave using EXTRACT()

This clarifies when justify_days() and justify_hours() are useful.
Paragraph moved too.

Reported-by: vodevsh@gmail.com
Discussion: https://postgr.es/m/152698651482.26744.15456677499485530703@wrigleys.postgresql.org

Backpatch-through: 9.3

6 years agodoc: update PG 11 release notes, mostly typo fixes
Bruce Momjian [Sat, 23 Jun 2018 21:15:34 +0000 (17:15 -0400)]
doc:  update PG 11 release notes, mostly typo fixes

Discussion: https://postgr.es/m/CAJnrtny0mYCMoRanZ1wvGqcPV-UDBoPetavDM1SqxnGVfZRV3g@mail.gmail.com

Author: Brad DeJong

6 years agodoc: mention use of cross platform logical replication
Bruce Momjian [Sat, 23 Jun 2018 20:35:25 +0000 (16:35 -0400)]
doc:  mention use of cross platform logical replication

Discussion: https://postgr.es/m/CAJrrPGfdknoqZcMipPy8XnH3hO3uRic6JTD=jv35oj1DWqL07g@mail.gmail.com

Author: Haribabu Kommi

6 years agoMark binary_upgrade_set_missing_value as parallel_unsafe
Andrew Dunstan [Sat, 23 Jun 2018 12:43:05 +0000 (08:43 -0400)]
Mark binary_upgrade_set_missing_value as parallel_unsafe

per buildfarm.

Bump catalog version again although in practice nobody is going to use
this in a parallel query.

6 years agoWhen index recurses to a partition, map columns numbers
Alvaro Herrera [Fri, 22 Jun 2018 19:12:53 +0000 (15:12 -0400)]
When index recurses to a partition, map columns numbers

Two out of three code paths were mapping column numbers correctly if a
partition had different column numbers than parent table, but the most
commonly used one (recursing in CREATE INDEX to a new index on a
partition) failed to map attribute numbers in expressions.  Oddly
enough, attnums in WHERE clauses are already handled correctly
everywhere.

Reported-by: Amit Langote
Author: Amit Langote
Discussion: https://postgr.es/m/dce1fda4-e0f0-94c9-6abb-f5956a98c057@lab.ntt.co.jp
Reviewed-by: Álvaro Herrera
6 years agoAvoid generating bogus paths with partitionwise aggregate.
Robert Haas [Fri, 22 Jun 2018 13:14:34 +0000 (09:14 -0400)]
Avoid generating bogus paths with partitionwise aggregate.

Previously, if some or all partitions had no partially aggregated path,
we would still try to generate a partially aggregated path for the
parent, leading to assertion failures or wrong answers.

Report by Rajkumar Raghuwanshi.  Patch by Jeevan Chalke, reviewed
by Ashutosh Bapat.  A few changes by me.

Discussion: http://postgr.es/m/CAKcux6=q4+Mw8gOOX16ef6ZMFp9Cve7KWFstUsrDa4GiFaXGUQ@mail.gmail.com

6 years agoAllow for pg_upgrade of attributes with missing values
Andrew Dunstan [Fri, 22 Jun 2018 12:42:36 +0000 (08:42 -0400)]
Allow for pg_upgrade of attributes with missing values

Commit 16828d5c02 neglected to do this, so upgraded databases would
silently get null instead of the specified default in rows without the
attribute defined.

A new binary upgrade function is provided to perform this and pg_dump is
adjusted to output a call to the function if required in binary upgrade
mode.

Also included is code to drop missing attribute values for dropped
columns. That way if the type is later dropped the missing value won't
have a dangling reference to the type.

Finally the regression tests are adjusted to ensure that there is a row
with a missing value so that this code is exercised in upgrade testing.

Catalog version unfortunately bumped.

Regression test changes from Tom Lane.
Remainder from me, reviewed by Tom Lane, Andres Freund, Alvaro Herrera

Discussion: https://postgr.es/m/19987.1529420110@sss.pgh.pa.us

6 years agoFixes for vacuum_cleanup_index_scale_factor GUC option
Alexander Korotkov [Fri, 22 Jun 2018 09:17:56 +0000 (12:17 +0300)]
Fixes for vacuum_cleanup_index_scale_factor GUC option

vacuum_cleanup_index_scale_factor was located in autovacuum group of
GUCs.  However, it affects not only autovacuum, but also manually run
VACUUM.  It appears that "client connection defaults" group of GUCs
is more appropriate for vacuum_cleanup_index_scale_factor, because
vacuum_*_age options are already located there.

Also, vacuum_cleanup_index_scale_factor was missed in
postgresql.conf.sample.  So, add it there with appropriate comment.

Author: Masahiko Sawada with minor editorization by me
Discussion: https://postgr.es/m/CAD21AoArsoXMLKudXSKN679FRzs6oubEchM53bHwn8Tp%3D2boNg%40mail.gmail.com

6 years agoFix typo in comment of commit_ts.c for incorrect reference to CLOG
Michael Paquier [Fri, 22 Jun 2018 04:30:26 +0000 (13:30 +0900)]
Fix typo in comment of commit_ts.c for incorrect reference to CLOG

Author: Shao Bret

6 years agoImprove coding pattern in Parallel Append code.
Amit Kapila [Fri, 22 Jun 2018 03:13:36 +0000 (08:43 +0530)]
Improve coding pattern in Parallel Append code.

The create_append_path code didn't consider that list_concat will
modify it's first argument leading to inconsistent traversal of
resulting list.  In practice, it won't lead to any user-visible bug
but changing it for making the code behave consistently.

Reported-by: Tom Lane
Author: Tom Lane
Reviewed-by: Amit Khandekar and Amit Kapila
Discussion: https://postgr.es/m/32365.1528994120@sss.pgh.pa.us

6 years agoDisclaim support for default namespace in XMLTABLE
Alvaro Herrera [Thu, 21 Jun 2018 21:01:10 +0000 (17:01 -0400)]
Disclaim support for default namespace in XMLTABLE

Pavel Stehule's original patch had support for default namespace, but I
ripped it out before commit -- hence the docs were correct when written,
and I broke them by omission :-(.  Remove the offending phrase.

Author: Daniel Gustafsson
Discussion: https://postgr.es/m/1550C5E5-FC70-4493-A226-AA137D831E8D@yesql.se

6 years agoFix partial aggregation for variance(int4) and related aggregates.
Tom Lane [Thu, 21 Jun 2018 20:18:33 +0000 (16:18 -0400)]
Fix partial aggregation for variance(int4) and related aggregates.

A typo in numeric_poly_combine caused bogus results for queries using
it, but of course would only manifest if parallel aggregation is
performed.  Reported by Rajkumar Raghuwanshi.

David Rowley did the diagnosis and the fix; I editorialized rather
heavily on his regression test additions.

Back-patch to v10 where the breakage was introduced (by 9cca11c91).

Discussion: https://postgr.es/m/CAKcux6nU4E2x8nkSBpLOT2DPvQ5LviJ3SGyAN6Sz7qDH4G4+Pw@mail.gmail.com

6 years agoSet correct context for XPath evaluation
Alvaro Herrera [Thu, 21 Jun 2018 19:56:11 +0000 (15:56 -0400)]
Set correct context for XPath evaluation

According to the SQL standard, the context of XMLTABLE's XPath
row_expression is the document node of the XML input document, not the
root node.  This becomes visible when a relative path rather than
absolute is used as row expression.  Absolute paths is what was used in
original tests and docs (and the most common form used in examples
throughout the interwebs), which explains why this wasn't noticed
before.

Other functions such as xpath() and xpath_exists() also have this
problem.  While not specified by the SQL standard, it would be pretty
odd to leave those functions to behave differently than XMLTABLE, so
change them too.  However, this is a backwards-incompatible change.

No backpatch, out of fear of breaking code depending on the original
broken behavior.

Author: Markus Winand
Reported-By: Markus Winand
Reviewed-by: Álvaro Herrera
Discussion: https://postgr.es/m/0684A598-002C-42A2-AE12-F024A324EAE4@winand.at

6 years agoImprove requirements documentation for ldap test suite.
Tom Lane [Thu, 21 Jun 2018 16:37:21 +0000 (12:37 -0400)]
Improve requirements documentation for ldap test suite.

Text by me; data contributed by me, Thomas Munro, Michael Paquier.

Discussion: https://postgr.es/m/20180521013425.GA4476@paquier.xyz

6 years agoFix mishandling of sortgroupref labels while splitting SRF targetlists.
Tom Lane [Thu, 21 Jun 2018 14:58:42 +0000 (10:58 -0400)]
Fix mishandling of sortgroupref labels while splitting SRF targetlists.

split_pathtarget_at_srfs() neglected to worry about sortgroupref labels
in the intermediate PathTargets it constructs.  I think we'd supposed
that their labeling didn't matter, but it does at least for the case that
GroupAggregate/GatherMerge nodes appear immediately under the ProjectSet
step(s).  This results in "ERROR: ORDER/GROUP BY expression not found in
targetlist" during create_plan(), as reported by Rajkumar Raghuwanshi.

To fix, make this logic track the sortgroupref labeling of expressions,
not just their contents.  This also restores the pre-v10 behavior that
separate GROUP BY expressions will be kept distinct even if they are
textually equal().

Discussion: https://postgr.es/m/CAKcux6=1_Ye9kx8YLBPmJs_xE72PPc6vNi5q2AOHowMaCWjJ2w@mail.gmail.com

6 years agoImprove wording of release notes item
Alexander Korotkov [Thu, 21 Jun 2018 12:49:19 +0000 (15:49 +0300)]
Improve wording of release notes item

PostgreSQL 11 introduces compress method for SP-GiST opclasses.  That
was mistakenly interpreted as compression support for SP-GiST while
actually that allows lossy representation of leaf keys.

Author: Alexander Korotkov, based on proposal by Darafei Praliaskouski
Discussion: https://postgr.es/m/CAC8Q8tKbYmNdiyWr7hE4GfMY4fbqHKkFziKgrUuWHH6HJQs3og%40mail.gmail.com

6 years agoUpdate expected XML output with disabled XML
Alvaro Herrera [Wed, 20 Jun 2018 17:05:44 +0000 (13:05 -0400)]
Update expected XML output with disabled XML

Should have been done in previous commit.

6 years agoAccept TEXT and CDATA nodes in XMLTABLE's column_expression.
Alvaro Herrera [Wed, 20 Jun 2018 16:58:12 +0000 (12:58 -0400)]
Accept TEXT and CDATA nodes in XMLTABLE's column_expression.

Column expressions that match TEXT or CDATA nodes must return the
contents of the nodes themselves, not the content of non-existing
children (i.e. the empty string).

Author: Markus Winand
Reported-by: Markus Winand
Reviewed-by: Álvaro Herrera
Discussion: https://postgr.es/m/0684A598-002C-42A2-AE12-F024A324EAE4@winand.at

6 years agoAdd missing include
Magnus Hagander [Wed, 20 Jun 2018 16:19:16 +0000 (18:19 +0200)]
Add missing include

Per buildfarm

6 years agoConsistently use the term 'partitioned rel' in partprune comments
Alvaro Herrera [Wed, 20 Jun 2018 15:43:01 +0000 (11:43 -0400)]
Consistently use the term 'partitioned rel' in partprune comments

We were using 'partition rel' in a few places, which is quite confusing.

Author: Amit Langote
Reviewed-by: David Rowley
Reviewed-by: Michaël Paquier
Discussion: https://postgr.es/m/fd256561-31a2-4b7e-cd84-d8241e7ebc3f@lab.ntt.co.jp

6 years agoFix typo
Magnus Hagander [Wed, 20 Jun 2018 14:06:03 +0000 (16:06 +0200)]
Fix typo

Reported using the website comment form

6 years agoFix a number of typos
Magnus Hagander [Wed, 20 Jun 2018 14:01:18 +0000 (16:01 +0200)]
Fix a number of typos

Author: Liudmila Mantrova <l.mantrova@postgrespro.ru>

6 years agoSupport long option for --pgdata in pg_verify_checksums
Magnus Hagander [Wed, 20 Jun 2018 12:33:48 +0000 (14:33 +0200)]
Support long option for --pgdata in pg_verify_checksums

Author: Daniel Gustafsson <daniel@yesql.se>

6 years agoDocument the -D and $PGDATA switch/env for pg_verify_checksums
Magnus Hagander [Wed, 20 Jun 2018 12:32:51 +0000 (14:32 +0200)]
Document the -D and $PGDATA switch/env for pg_verify_checksums

Author: Daniel Gustafsson <daniel@yesql.se>

6 years agoMove pg_verify_checksum docs to Server utils
Magnus Hagander [Wed, 20 Jun 2018 12:28:56 +0000 (14:28 +0200)]
Move pg_verify_checksum docs to Server utils

Author: Daniel Gustafsson <daniel@yesql.se>

6 years agoDon't consider parallel append for parallel unsafe paths.
Amit Kapila [Wed, 20 Jun 2018 02:21:42 +0000 (07:51 +0530)]
Don't consider parallel append for parallel unsafe paths.

Commit ab72716778 allowed Parallel Append paths to be generated for a
relation that is not parallel safe.  Prevent that from happening.

Initial analysis by Tom Lane.

Reported-by: Rajkumar Raghuwanshi
Author: Amit Kapila and Rajkumar Raghuwanshi
Reviewed-by: Amit Khandekar and Robert Haas
Discussion:https://postgr.es/m/CAKcux6=tPJ6nJ08r__nU_pmLQiC0xY15Fn0HvG1Cprsjdd9s_Q@mail.gmail.com

6 years agoClarify use of temporary tables within partition trees
Michael Paquier [Wed, 20 Jun 2018 01:42:25 +0000 (10:42 +0900)]
Clarify use of temporary tables within partition trees

Since their introduction, partition trees have been a bit lossy
regarding temporary relations.  Inheritance trees respect the following
patterns:
1) a child relation can be temporary if the parent is permanent.
2) a child relation can be temporary if the parent is temporary.
3) a child relation cannot be permanent if the parent is temporary.
4) The use of temporary relations also imply that when both parent and
child need to be from the same sessions.

Partitions share many similar patterns with inheritance, however the
handling of the partition bounds make the situation a bit tricky for
case 1) as the partition code bases a lot of its lookup code upon
PartitionDesc which does not really look after relpersistence.  This
causes for example a temporary partition created by session A to be
visible by another session B, preventing this session B to create an
extra partition which overlaps with the temporary one created by A with
a non-intuitive error message.  There could be use-cases where mixing
permanent partitioned tables with temporary partitions make sense, but
that would be a new feature.  Partitions respect 2), 3) and 4) already.

It is a bit depressing to see those error checks happening in
MergeAttributes() whose purpose is different, but that's left as future
refactoring work.

Back-patch down to 10, which is where partitioning has been introduced,
except that default partitions do not apply there.  Documentation also
includes limitations related to the use of temporary tables with
partition trees.

Reported-by: David Rowley
Author: Amit Langote, Michael Paquier
Reviewed-by: Ashutosh Bapat, Amit Langote, Michael Paquier
Discussion: https://postgr.es/m/CAKJS1f94Ojk0og9GMkRHGt8wHTW=ijq5KzJKuoBoqWLwSVwGmw@mail.gmail.com

6 years agoClarify the README files for the various separate TAP-based test suites.
Tom Lane [Tue, 19 Jun 2018 23:30:50 +0000 (19:30 -0400)]
Clarify the README files for the various separate TAP-based test suites.

Explain the difference between "make check" and "make installcheck".
Mention the need for --enable-tap-tests (only some of these did so
before).  Standardize their wording about how to run the tests.

6 years agoREADME: add URLs for openldap installation
Bruce Momjian [Tue, 19 Jun 2018 19:52:17 +0000 (15:52 -0400)]
README:  add URLs for openldap installation

Reported-by: Michael Paquier
Discussion: https://postgr.es/m/20180521013425.GA4476@paquier.xyz

Backpatch-through: head

6 years agodoc: explain use of json_populate_record{set}()
Bruce Momjian [Tue, 19 Jun 2018 17:43:40 +0000 (13:43 -0400)]
doc:  explain use of json_populate_record{set}()

The set-returning nature of these functions make their use unclear. The
modified paragraph was added in PG 9.4.

Reported-by: yshaladi@denodo.com
Discussion:  https://postgr.es/m/152571684246.9460.18059951267371255159@wrigleys.postgresql.org

Backpatch-through: 9.4

6 years agoFix typos in release notes
Alexander Korotkov [Tue, 19 Jun 2018 15:32:20 +0000 (18:32 +0300)]
Fix typos in release notes

Author: Daniel Gustafsson
Discussion: https://postgr.es/m/8E8CF1F8-BCB2-4D86-A059-4BF5138F6D87%40yesql.se

6 years agoTrack new configure flags introduced for version 11 in pg_config.h.win32
Michael Paquier [Tue, 19 Jun 2018 00:00:33 +0000 (09:00 +0900)]
Track new configure flags introduced for version 11 in pg_config.h.win32

The following set of flags mainly matter when building Postgres code
with MSVC and those have been forgotten with latest developments:
- HAVE_LDAP_INITIALIZE, added by 35c0754f, and marked as disabled.
ldap_initialize() is a non-standard extension that provides a way to use
"ldaps" with OpenLDAP, but it is not supported on Windows, and instead
the non-standard ldap_sslinit() is used if WIN32 is defined.  Per input
from Thomas Munro.
- HAVE_X509_GET_SIGNATURE_NID, added by 054e8c6c, which is used by
SCRAM's channel binding tls-server-end-point.  Having this flag disabled
would cause this channel binding type to be unsupported for Windows
builds.
- HAVE_SSL_CLEAR_OPTIONS, added recently as of a364dfa4 to disable SSL
compression.
- HAVE_ASN1_STRING_GET0_DATA, added by 5c6df67, which is used to track
a new compatibility with OpenSSL 1.1.0.  This was missing from
pg_config.win32.h and is not enabled by default.  HAVE_BIO_GET_DATA,
HAVE_OPENSSL_INIT_SSL and HAVE_BIO_METH_NEW gain the same treatment.

The second and third flags are enabled with this commit, which raises
the bar of OpenSSL support to 1.0.2 on Windows as a minimum.  As this
is the LTS (long-time support) version of OpenSSL community and knowing
that all recent installers referred by OpenSSL upstream don't have
anymore 1.0.1 or older, we could live with that requirement.  In order
to allow the code to compile with OpenSSL 1.1.0, all the flags mentioned
above need to be enabled in pg_config.h.win32.

Author: Michael Paquier
Reviewed-by: Andrew Dunstan
Discussion: https://postgr.es/m/20180529211559.GF6632@paquier.xyz

6 years agoFix jsonb_plperl to convert Perl UV values correctly.
Tom Lane [Mon, 18 Jun 2018 21:39:57 +0000 (17:39 -0400)]
Fix jsonb_plperl to convert Perl UV values correctly.

Values greater than IV_MAX were incorrectly converted to SQL,
for instance ~0 would become -1 rather than 18446744073709551615
(on a 64-bit machine).

Dagfinn Ilmari Mannsåker, adjusted a bit by me

Discussion: https://postgr.es/m/d8jtvskjzzs.fsf@dalvik.ping.uio.no

6 years agoFix contrib/hstore_plperl to look through scalar refs.
Tom Lane [Mon, 18 Jun 2018 19:55:06 +0000 (15:55 -0400)]
Fix contrib/hstore_plperl to look through scalar refs.

Bring this transform function into sync with the policy established
by commit 3a382983d.

Also, fix it to make sure that what it drills down to is indeed a
hash, and not some other kind of Perl SV.  Previously, the test
cases added here provoked crashes.

Because of the crash hazard, back-patch to 9.5 where this module
was introduced.

Discussion: https://postgr.es/m/28336.1528393969@sss.pgh.pa.us

6 years agoAllow plperl_sv_to_datum to look through scalar refs.
Tom Lane [Mon, 18 Jun 2018 19:31:57 +0000 (15:31 -0400)]
Allow plperl_sv_to_datum to look through scalar refs.

There seems little reason for the policy of throwing error if we
find a ref to something other than a hash or array.   Recursively
look through the ref, instead.  This makes the behavior in non-transform
cases comparable to what was already instantiated for jsonb_plperl.

Note that because we invoke any available transform function before
considering the ref case, it's up to each transform function whether
it wants to play along with this behavior or do something different.

Because the previous behavior was just to throw a useless error,
this seems unlikely to create any compatibility issues.  Still, given
the lack of field complaints so far, seems best not to back-patch.

Discussion: https://postgr.es/m/28336.1528393969@sss.pgh.pa.us

6 years agoAvoid platform-dependent output from Data::Dumper.
Tom Lane [Mon, 18 Jun 2018 18:53:21 +0000 (14:53 -0400)]
Avoid platform-dependent output from Data::Dumper.

Per buildfarm, the output from Data::Dumper for an IEEE infinity
is platform-dependent (e.g. "inf" vs "Inf").  Just skip that one
test case in the plperlu test; testing it on the plperl side is
coverage enough.  Fixes issue in commit 1731e3741.

6 years agoFix excessive enreferencing in jsonb-to-plperl transform.
Tom Lane [Mon, 18 Jun 2018 18:31:42 +0000 (14:31 -0400)]
Fix excessive enreferencing in jsonb-to-plperl transform.

We want, say, 2 to be transformed as 2, not \\2 which is what the
original coding produced.  Perl's standard seems to be to add an RV
wrapper only for hash and array SVs, so do it like that.

This was missed originally because the test cases only checked what came
out of a round trip back to SQL, and the strip-all-dereferences loop at
the top of SV_to_JsonbValue hides the extra refs from view.  As a better
test, print the Perl value with Data::Dumper, like the hstore_plperlu
tests do.  While we can't do that in the plperl test, only plperlu,
that should be good enough because this code is the same for both PLs.
But also add a simplistic test for extra REFs, which we can do in both.

That strip-all-dereferences behavior is now a bit dubious; it's unlike
what happens for other Perl-to-SQL conversions.  However, the best
thing to do seems to be to leave it alone and make the other conversions
act similarly.  That will be done separately.

Dagfinn Ilmari Mannsåker, adjusted a bit by me

Discussion: https://postgr.es/m/d8jlgbq66t9.fsf@dalvik.ping.uio.no

6 years agoRemove obsolete prohibition on function name matching a column name.
Tom Lane [Mon, 18 Jun 2018 15:57:33 +0000 (11:57 -0400)]
Remove obsolete prohibition on function name matching a column name.

ProcedureCreate formerly threw an error if the function to be created
has one argument of composite type and the function name matches some
column of the composite type.  This was a (very non-bulletproof) defense
against creating situations where f(x) and x.f are ambiguous.  But we
don't really need such a defense in the wake of commit b97a3465d, which
allows us to deal with such situations fairly cleanly.  This behavior
also created a dump-and-reload hazard, since a function might be
rejected if a conflicting column name had been added to the input
composite type later.  Hence, let's just drop the check.

Discussion: https://postgr.es/m/CAOW5sYa3Wp7KozCuzjOdw6PiOYPi6D=VvRybtH2S=2C0SVmRmA@mail.gmail.com

6 years agoConsider syntactic form when disambiguating function vs column reference.
Tom Lane [Mon, 18 Jun 2018 15:39:33 +0000 (11:39 -0400)]
Consider syntactic form when disambiguating function vs column reference.

Postgres has traditionally considered the syntactic forms f(x) and x.f
to be equivalent, allowing tricks such as writing a function and then
using it as though it were a computed-on-demand column.  However, our
behavior when both interpretations are feasible left something to be
desired: we always chose the column interpretation.  This could lead
to very surprising results, as in a recent bug report from Neil Conway.
It also created a dump-and-reload hazard, since what was a function
call in a dumped view could get interpreted as a column reference
at reload, if a matching column name had been added to the underlying
table since the view was created.

What seems better, in ambiguous situations, is to prefer the choice
matching the syntactic form of the reference.  This seems much less
astonishing in general, and it fixes the dump/reload hazard.

Although this could be called a bug fix, there have been few complaints
and there's some small risk of breaking applications that depend on the
old behavior, so no back-patch.  It does seem reasonable to slip it
into v11, though.

Discussion: https://postgr.es/m/CAOW5sYa3Wp7KozCuzjOdw6PiOYPi6D=VvRybtH2S=2C0SVmRmA@mail.gmail.com

6 years agoAdd PGTYPESchar_free() to avoid cross-module problems on Windows.
Thomas Munro [Mon, 18 Jun 2018 06:33:53 +0000 (18:33 +1200)]
Add PGTYPESchar_free() to avoid cross-module problems on Windows.

On Windows, it is sometimes important for corresponding malloc() and
free() calls to be made from the same DLL, since some build options can
result in multiple allocators being active at the same time.  For that
reason we already provided PQfreemem().  This commit adds a similar
function for freeing string results allocated by the pgtypes library.

Author: Takayuki Tsunakawa
Reviewed-by: Kyotaro Horiguchi
Discussion: https://postgr.es/m/0A3221C70F24FB45833433255569204D1F8AD5D6%40G01JPEXMBYT05

6 years agoPrevent hard failures of standbys caused by recycled WAL segments
Michael Paquier [Mon, 18 Jun 2018 01:43:27 +0000 (10:43 +0900)]
Prevent hard failures of standbys caused by recycled WAL segments

When a standby's WAL receiver stops reading WAL from a WAL stream, it
writes data to the current WAL segment without having priorily zero'ed
the page currently written to, which can cause the WAL reader to read
junk data from a past recycled segment and then it would try to get a
record from it.  While sanity checks in place provide most of the
protection needed, in some rare circumstances, with chances increasing
when a record header crosses a page boundary, then the startup process
could fail violently on an allocation failure, as follows:
FATAL:  invalid memory alloc request size XXX

This is confusing for the user and also unhelpful as this requires in
the worst case a manual restart of the instance, impacting potentially
the availability of the cluster, and this also makes WAL data look like
it is in a corrupted state.

The chances of seeing failures are higher if the connection between the
standby and its root node is unstable, causing WAL pages to be written
in the middle.  A couple of approaches have been discussed, like
zero-ing  new WAL pages within the WAL receiver itself but this has the
disadvantage of impacting performance of any existing instances as this
breaks the sequential writes done by the WAL receiver.  This commit
deals with the problem with a more simple approach, which has no
performance impact without reducing the detection of the problem: if a
record is found with a length higher than 1GB for backends, then do not
try any allocation and report a soft failure which will force the
standby to retry reading WAL.  It could be possible that the allocation
call passes and that an unnecessary amount of memory is allocated,
however follow-up checks on records would just fail, making this
allocation short-lived anyway.

This patch owes a great deal to Tsunakawa Takayuki for reporting the
failure first, and then discussing a couple of potential approaches to
the problem.

Backpatch down to 9.5, which is where palloc_extended has been
introduced.

Reported-by: Tsunakawa Takayuki
Reviewed-by: Tsunakawa Takayuki
Author: Michael Paquier
Discussion: https://postgr.es/m/0A3221C70F24FB45833433255569204D1F8B57AD@G01JPEXMBYT05

6 years agoSuppress -Wshift-negative-value warnings.
Tom Lane [Sun, 17 Jun 2018 20:15:11 +0000 (16:15 -0400)]
Suppress -Wshift-negative-value warnings.

Clean up four places that result in compiler warnings when using recent
gcc with this warning class enabled (as seen on buildfarm members
calliphoridae, skink, and others).  In all these places, this is purely
cosmetic, because the shift distance could not be large enough to risk
a change of sign, so there's no chance of implementation-dependent
behavior.  Still, it's easy enough to avoid the warning by casting the
shifted value to unsigned, so let's do that.

Patch HEAD only, this isn't worth a back-patch.

6 years agoRemove INCLUDE attributes section from docs.
Peter Geoghegan [Sat, 16 Jun 2018 22:28:50 +0000 (15:28 -0700)]
Remove INCLUDE attributes section from docs.

Discussing covering indexes in a chapter that is mostly about the
behavior of B-Tree operator classes is unnecessary.  The CREATE INDEX
documentation's handling of covering indexes seems sufficient.

Discussion: https://postgr.es/m/CAH2-WzmpU=L_6VjhhOAMfoyHLr-pZd1kDc+jpa3c3a8EOmtcXA@mail.gmail.com

6 years agoUse -Wno-format-truncation and -Wno-stringop-truncation, if available.
Tom Lane [Sat, 16 Jun 2018 19:34:07 +0000 (15:34 -0400)]
Use -Wno-format-truncation and -Wno-stringop-truncation, if available.

gcc 8 has started emitting some warnings that are largely useless for
our purposes, particularly since they complain about code following
the project-standard coding convention that path names are assumed
to be shorter than MAXPGPATH.  Even if we make the effort to remove
that assumption in some future release, the changes wouldn't get
back-patched.  Hence, just suppress these warnings, on compilers that
have these switches.

Backpatch to all supported branches.

Discussion: https://postgr.es/m/1524563856.26306.9.camel@gunduz.org

6 years agoAvoid unnecessary use of strncpy in a couple of places in ecpg.
Tom Lane [Sat, 16 Jun 2018 18:58:11 +0000 (14:58 -0400)]
Avoid unnecessary use of strncpy in a couple of places in ecpg.

Use of strncpy with a length limit based on the source, rather than
the destination, is non-idiomatic and draws warnings from gcc 8.
Replace with memcpy, which does exactly the same thing in these cases,
but with less chance for confusion.

Backpatch to all supported branches.

Discussion: https://postgr.es/m/21789.1529170195@sss.pgh.pa.us

6 years agoUse snprintf not sprintf in pg_waldump's timestamptz_to_str.
Tom Lane [Sat, 16 Jun 2018 18:45:47 +0000 (14:45 -0400)]
Use snprintf not sprintf in pg_waldump's timestamptz_to_str.

This could only cause an issue if strftime returned a ridiculously
long timezone name, which seems unlikely; and it wouldn't qualify
as a security problem even then, since pg_waldump (nee pg_xlogdump)
is a debug tool not part of the server.  But gcc 8 has started issuing
warnings about it, so let's use snprintf and be safe.

Backpatch to 9.3 where this code was added.

Discussion: https://postgr.es/m/21789.1529170195@sss.pgh.pa.us

6 years agoFix some minor error-checking oversights in ParseFuncOrColumn().
Tom Lane [Sat, 16 Jun 2018 18:10:17 +0000 (14:10 -0400)]
Fix some minor error-checking oversights in ParseFuncOrColumn().

Recent additions to ParseFuncOrColumn to make it reject non-procedure
functions in CALL were neither adequate nor documented.  Reorganize
the code to ensure uniform results for all the cases that should be
rejected.  Also, use ERRCODE_WRONG_OBJECT_TYPE for this case as well
as the converse case of a procedure in a non-CALL context.  The
original coding used ERRCODE_UNDEFINED_FUNCTION which seems wrong,
and is certainly inconsistent with the adjacent wrong-kind-of-routine
errors.

This reorganization also causes the checks for aggregate decoration with
a non-aggregate function to be made in the FUNCDETAIL_COERCION case;
that they were not is a long-standing oversight.

Discussion: https://postgr.es/m/14497.1529089235@sss.pgh.pa.us

6 years agoRemove AELs from subxids correctly on standby
Simon Riggs [Sat, 16 Jun 2018 13:03:29 +0000 (14:03 +0100)]
Remove AELs from subxids correctly on standby

Issues relate only to subtransactions that hold AccessExclusiveLocks
when replayed on standby.

Prior to PG10, aborting subtransactions that held an
AccessExclusiveLock failed to release the lock until top level commit or
abort. 49bff5300d527 fixed that.

However, 49bff5300d527 also introduced a similar bug where subtransaction
commit would fail to release an AccessExclusiveLock, leaving the lock to
be removed sometimes early and sometimes late. This commit fixes
that bug also. Backpatch to PG10 needed.

Tested by observation. Note need for multi-node isolationtester to improve
test coverage for this and other HS cases.

Reported-by: Simon Riggs
Author: Simon Riggs

6 years agoFix memory leak in BufFileCreateShared().
Tatsuo Ishii [Sat, 16 Jun 2018 05:21:08 +0000 (14:21 +0900)]
Fix memory leak in BufFileCreateShared().

Also this commit unifies some duplicated code in makeBufFile() and
BufFileOpenShared() into new function makeBufFileCommon().

Author: Antonin Houska
Reviewed-By: Thomas Munro, Tatsuo Ishii
Discussion: https://postgr.es/m/16139.1529049566%40localhost

6 years agoFix off-by-one bug in XactLogCommitRecord
Alvaro Herrera [Fri, 15 Jun 2018 19:00:41 +0000 (15:00 -0400)]
Fix off-by-one bug in XactLogCommitRecord

Commit 1eb6d6527aae introduced zeroed alignment bytes in the GID field
of commit/abort WAL records.  Fixup commit cf5a1890592b later changed
that representation into a regular cstring with a single terminating
zero byte, but it also introduced an off-by-one mistake.  Fix that.

Author: Nikhil Sontakke
Reported-by: Nikhil Sontakke
Discussion: https://postgr.es/m/CAMGcDxey6dG1DP34_tJMoWPcp5sPJUAL4K5CayUUXLQSx2GQpA@mail.gmail.com

6 years agoFix memory leak in PLySequence_ToJsonbValue()
Alexander Korotkov [Fri, 15 Jun 2018 12:01:46 +0000 (15:01 +0300)]
Fix memory leak in PLySequence_ToJsonbValue()

PyObject returned from PySequence_GetItem() is not released.  Similar code in PLyMapping_ToJsonbValue() is correct, because according to Python documentation
PyList_GetItem() and PyTuple_GetItem() return a borrowed reference while
PySequence_GetItem() returns new reference.  contrib/jsonb_plpython is new
in PostgreSQL 11, no backpatch is needed.

Author: Nikita Glukhov
Discussion: https://postgr.es/m/6001af16-b242-2527-bc7e-84b8a959163b%40postgrespro.ru

6 years agoFix memory leak.
Tatsuo Ishii [Fri, 15 Jun 2018 07:32:59 +0000 (16:32 +0900)]
Fix memory leak.

Memory is allocated twice for "file" and "files" variables in
BufFileOpenShared().

Author: Antonin Houska
Discussion: https://postgr.es/m/11329.1529045692%40localhost

6 years agoFail BRIN control functions during recovery explicitly
Alvaro Herrera [Thu, 14 Jun 2018 16:51:32 +0000 (12:51 -0400)]
Fail BRIN control functions during recovery explicitly

They already fail anyway, but prior to this patch they raise an ugly
error message about a lock that cannot be acquired.  This just improves
the message.

Author: Masahiko Sawada
Reported-by: Masahiko Sawada
Discussion: https://postgr.es/m/CAD21AoBZau4g4_NUf3BKNd=CdYK+xaPdtJCzvOC1TxGdTiJx_Q@mail.gmail.com
Reviewed-by: Kuntal Ghosh, Alexander Korotkov, Simon Riggs, Michaël Paquier, Álvaro Herrera
6 years agoRemove spurious code comments in standby related code
Simon Riggs [Thu, 14 Jun 2018 11:17:51 +0000 (12:17 +0100)]
Remove spurious code comments in standby related code

GetRunningTransactionData() suggested that subxids were not worth
optimizing away if overflowed, yet they have already been removed
for that case.

Changes to LogAccessExclusiveLock() API forgot to remove the
prior comment when it was copied to LockAcquire().

6 years agoRemove cut-off bug from RunningTransactionData
Simon Riggs [Thu, 14 Jun 2018 11:02:41 +0000 (12:02 +0100)]
Remove cut-off bug from RunningTransactionData

32ac7a118fc17f5 tried to fix a Hot Standby issue
reported by Greg Stark, but in doing so caused
a different bug to appear, noted by Andres Freund.

Revoke the core changes from 32ac7a118fc17f5,
leaving in its place a minor change in code
ordering and comments to explain for the future.

6 years agoCode review for match_clause_to_partition_key().
Tom Lane [Wed, 13 Jun 2018 20:10:30 +0000 (16:10 -0400)]
Code review for match_clause_to_partition_key().

Fix inconsistent decisions about NOMATCH vs UNSUPPORTED result codes.
If we're going to cater for partkeys that have the same expression and
different collations, surely we should also support partkeys with the
same expression and different opclasses.

Clean up shaky handling of commuted opclauses, eg checking the wrong
operator to see what its negator is.  This wouldn't cause any actual
bugs given a sane opclass definition, but it doesn't seem helpful to
expend more code to be less correct.

Improve handling of null elements in ScalarArrayOp arrays: in the
"op ALL" case, we can conclude they result in an unsatisfiable clause.

Minor cosmetic changes and comment improvements.

6 years agoFix some ill-chosen names for globally-visible partition support functions.
Tom Lane [Wed, 13 Jun 2018 17:18:02 +0000 (13:18 -0400)]
Fix some ill-chosen names for globally-visible partition support functions.

"compute_hash_value" is particularly gratuitously generic, but IMO
all of these ought to have names clearly related to partitioning.

6 years agoFix up run-time partition pruning's use of relcache's partition data.
Tom Lane [Wed, 13 Jun 2018 16:03:19 +0000 (12:03 -0400)]
Fix up run-time partition pruning's use of relcache's partition data.

The previous coding saved pointers into the partitioned table's relcache
entry, but then closed the relcache entry, causing those pointers to
nominally become dangling.  Actual trouble would be seen in the field
only if a relcache flush occurred mid-query, but that's hardly out of
the question.

While we could fix this by copying all the data in question at query
start, it seems better to just hold the relcache entry open for the
whole query.

While at it, improve the handling of support-function lookups: do that
once per query not once per pruning test.  There's still something to be
desired here, in that we fail to exploit the possibility of caching data
across queries in the fn_extra fields of the relcache's FmgrInfo structs,
which could happen if we just used those structs in-place rather than
copying them.  However, combining that with the possibility of per-query
lookups of cross-type comparison functions seems to require changes in the
APIs of a lot of the pruning support functions, so it's too invasive to
consider as part of this patch.  A win would ensue only for complex
partition key data types (e.g. arrays), so it may not be worth the
trouble.

David Rowley and Tom Lane

Discussion: https://postgr.es/m/17850.1528755844@sss.pgh.pa.us

6 years agoDocumentation improvement for pg_trgm
Alexander Korotkov [Wed, 13 Jun 2018 15:23:00 +0000 (18:23 +0300)]
Documentation improvement for pg_trgm

Documentation of word_similarity() and strict_word_similarity() functions
contains some vague wordings which could confuse users.  This patch makes
those wordings more clear.  word_similarity() was introduced in PostgreSQL 9.6,
and corresponding part of documentation needs to be backpatched.

Author: Bruce Momjian, Alexander Korotkov
Discussion: https://postgr.es/m/20180526165648.GB12510%40momjian.us
Backpatch: 9.6, where word_similarity() was introduced

6 years agoExclude files in .git from list of perl files
Andrew Dunstan [Tue, 12 Jun 2018 18:54:43 +0000 (14:54 -0400)]
Exclude files in .git from list of perl files

The .git directory might contain perl files, as hooks, for example.
Since we have no control over these they should be excluded from things
like our perlcritic checks.

Per offline report from Mike Blackwell.

6 years agoFix bugs in vacuum of shared rels, by keeping their relcache entries current.
Andres Freund [Tue, 12 Jun 2018 18:13:21 +0000 (11:13 -0700)]
Fix bugs in vacuum of shared rels, by keeping their relcache entries current.

When vacuum processes a relation it uses the corresponding relcache
entry's relfrozenxid / relminmxid as a cutoff for when to remove
tuples etc. Unfortunately for nailed relations (i.e. critical system
catalogs) bugs could frequently lead to the corresponding relcache
entry being stale.

This set of bugs could cause actual data corruption as vacuum would
potentially not remove the correct row versions, potentially reviving
them at a later point.  After 699bf7d05c some corruptions in this vein
were prevented, but the additional error checks could also trigger
spuriously. Examples of such errors are:
  ERROR: found xmin ... from before relfrozenxid ...
and
  ERROR: found multixact ... from before relminmxid ...
To be caused by this bug the errors have to occur on system catalog
tables.

The two bugs are:

1) Invalidations for nailed relations were ignored, based on the
   theory that the relcache entry for such tables doesn't
   change. Which is largely true, except for fields like relfrozenxid
   etc.  This means that changes to relations vacuumed in other
   sessions weren't picked up by already existing sessions.  Luckily
   autovacuum doesn't have particularly longrunning sessions.

2) For shared *and* nailed relations, the shared relcache init file
   was never invalidated while running.  That means that for such
   tables (e.g. pg_authid, pg_database) it's not just already existing
   sessions that are affected, but even new connections are as well.
   That explains why the reports usually were about pg_authid et. al.

To fix 1), revalidate the rd_rel portion of a relcache entry when
invalid. This implies a bit of extra complexity to deal with
bootstrapping, but it's not too bad.  The fix for 2) is simpler,
simply always remove both the shared and local init files.

Author: Andres Freund
Reviewed-By: Alvaro Herrera
Discussion:
    https://postgr.es/m/20180525203736.crkbg36muzxrjj5e@alap3.anarazel.de
    https://postgr.es/m/CAMa1XUhKSJd98JW4o9StWPrfS=11bPgG+_GDMxe25TvUY4Sugg@mail.gmail.com
    https://postgr.es/m/CAKMFJucqbuoDRfxPDX39WhA3vJyxweRg_zDVXzncr6+5wOguWA@mail.gmail.com
    https://postgr.es/m/CAGewt-ujGpMLQ09gXcUFMZaZsGJC98VXHEFbF-tpPB0fB13K+A@mail.gmail.com
Backpatch: 9.3-

6 years agoConvert debug message from ereport to elog
Peter Eisentraut [Tue, 12 Jun 2018 15:33:39 +0000 (11:33 -0400)]
Convert debug message from ereport to elog

6 years agodoc: Replace non-ASCII lines in psql example output
Peter Eisentraut [Tue, 12 Jun 2018 12:19:52 +0000 (08:19 -0400)]
doc: Replace non-ASCII lines in psql example output

We normally use the default line mode in examples.

6 years agodoc: Suggest logical replication more prominently for upgrading
Peter Eisentraut [Tue, 12 Jun 2018 01:34:32 +0000 (21:34 -0400)]
doc: Suggest logical replication more prominently for upgrading

The previous wording suggested only Slony, and there are more options
available.

6 years agoFix access to just-closed relcache entry.
Tom Lane [Mon, 11 Jun 2018 23:17:50 +0000 (19:17 -0400)]
Fix access to just-closed relcache entry.

It might be impossible for this to cause a problem in non-debug builds,
since there'd be no opportunity for the relcache entry to get recycled
before the fetch.  It blows up nicely with -DRELCACHE_FORCE_RELEASE plus
valgrind, though.

Evidently introduced by careless refactoring in commit f0e44751d.
Back-patch accordingly.

Discussion: https://postgr.es/m/27543.1528758304@sss.pgh.pa.us

6 years agoFix oversight from 9e149c8 with spin-lock handling
Michael Paquier [Mon, 11 Jun 2018 21:52:34 +0000 (06:52 +0900)]
Fix oversight from 9e149c8 with spin-lock handling

Calling an external function while a pin-lock is held is a bad idea as
those are designed to be short-lived.  The stress of a first commit into
a large git history may contribute to that.

Reported-by: Andres Freund
Discussion: https://postgr.es/m/20180611164952.vmxdpdpirdtkdsz6@alap3.anarazel.de

6 years agoImprove ExecFindInitialMatchingSubPlans's subplan renumbering logic.
Tom Lane [Mon, 11 Jun 2018 21:35:43 +0000 (17:35 -0400)]
Improve ExecFindInitialMatchingSubPlans's subplan renumbering logic.

We don't need two passes if we scan child partitions before parents,
as that way the children's present_parts are up to date before they're
needed.  I (tgl) think there's actually a bug being fixed here, for the
case of an intermediate partitioned table with no direct leaf children,
but haven't attempted to construct a test case to prove it.

David Rowley

Discussion: https://postgr.es/m/CAKJS1f-6GODRNgEtdPxCnAPme2h2hTztB6LmtfdmcYAAOE0kQg@mail.gmail.com

6 years agoImprove commentary about run-time partition pruning data structures.
Tom Lane [Mon, 11 Jun 2018 21:14:46 +0000 (17:14 -0400)]
Improve commentary about run-time partition pruning data structures.

No code changes except for a couple of new Asserts.

David Rowley and Tom Lane

Discussion: https://postgr.es/m/CAKJS1f-6GODRNgEtdPxCnAPme2h2hTztB6LmtfdmcYAAOE0kQg@mail.gmail.com

6 years agoAdjust error message
Peter Eisentraut [Mon, 11 Jun 2018 21:19:11 +0000 (17:19 -0400)]
Adjust error message

Makes it look more similar to other ones, and avoids the need for
pluralization.

6 years agoDon't needlessly check the partition contraint twice
Alvaro Herrera [Mon, 11 Jun 2018 20:53:33 +0000 (16:53 -0400)]
Don't needlessly check the partition contraint twice

Starting with commit f0e44751d717, ExecConstraints was in charge of
running the partition constraint; commit 19c47e7c8202 modified that so
that caller could request to skip that checking depending on some
conditions, but that commit and 15ce775faa42 together introduced a small
bug there which caused ExecInsert to request skipping the constraint
check but have this not be honored -- in effect doing the check twice.
This could have been fixed in a very small patch, but on further
analysis of the involved function and its callsites, it turns out to be
simpler to give the responsibility of checking the partition constraint
fully to the caller, and return ExecConstraints to its original
(pre-partitioning) shape where it only checked tuple descriptor-related
constraints.  Each caller must do partition constraint checking on its
own schedule, which is more convenient after commit 2f178441044 anyway.

Reported-by: David Rowley
Author: David Rowley, Álvaro Herrera
Reviewed-by: Amit Langote, Amit Khandekar, Simon Riggs
Discussion: https://postgr.es/m/CAKJS1f8w8+awsxgea8wt7_UX8qzOQ=Tm1LD+U1fHqBAkXxkW2w@mail.gmail.com

6 years agoMove perlcritic files to new perlcheck directory
Andrew Dunstan [Mon, 11 Jun 2018 18:54:28 +0000 (14:54 -0400)]
Move perlcritic files to new perlcheck directory

6 years agoAdd a script to detect perl compile time errors and warnings
Andrew Dunstan [Mon, 11 Jun 2018 18:47:20 +0000 (14:47 -0400)]
Add a script to detect perl compile time errors and warnings

Also add a function that centralizes the logic for locating all our perl
files and use it in pgperlcritic and pgperltidy as well as the new
pgperlcheck.

6 years agoFix run-time partition pruning code to handle NULL values properly.
Tom Lane [Mon, 11 Jun 2018 16:08:09 +0000 (12:08 -0400)]
Fix run-time partition pruning code to handle NULL values properly.

The previous coding just ignored pruning constraints that compare a
partition key to a null-valued expression.  This is silly, since really
what we can do there is conclude that all partitions are rejected: the
pruning operator is known strict so the comparison must always fail.

This also fixes the logic to not ignore constisnull for a Const comparison
value.  That's probably an unreachable case, since the planner would
normally have simplified away a strict operator with a constant-null input.
But this code has no business assuming that.

David Rowley, per a gripe from me

Discussion: https://postgr.es/m/26279.1528670981@sss.pgh.pa.us

6 years agoMake new error code name match SQL standard more closely
Peter Eisentraut [Mon, 11 Jun 2018 15:15:28 +0000 (11:15 -0400)]
Make new error code name match SQL standard more closely

Discussion: https://www.postgresql.org/message-id/dff3d555-bea4-ac24-29b2-29521b9d08e8%402ndquadrant.com

6 years agoUpdate config.guess and config.sub
Peter Eisentraut [Mon, 11 Jun 2018 12:54:58 +0000 (08:54 -0400)]
Update config.guess and config.sub

6 years agoFix grammar in documentation related to checkpoint_flush_after
Michael Paquier [Mon, 11 Jun 2018 00:54:25 +0000 (09:54 +0900)]
Fix grammar in documentation related to checkpoint_flush_after

Reported-by: Christopher Jones
6 years agoFix a couple of bugs with replication slot advancing feature
Michael Paquier [Mon, 11 Jun 2018 00:26:13 +0000 (09:26 +0900)]
Fix a couple of bugs with replication slot advancing feature

A review of the code has showed up a couple of issues fixed by this
commit:
- Physical slots have been using the confirmed LSN position as a start
comparison point which is always 0/0, instead use the restart LSN
position (logical slots need to use the confirmed LSN position, which
was correct).
- The actual slot update was incorrect for both physical and logical
slots.  Physical slots need to use their restart_lsn as base comparison
point (confirmed_flush was used because of previous point), and logical
slots need to begin reading WAL from restart_lsn (confirmed_flush was
used as well), while confirmed_flush is compiled depending on the
decoding context and record read, and is the LSN position returned back
to the caller.
- Never return 0/0 if a slot cannot be advanced.  This way, if a slot is
advanced while the activity is idle, then the same position is returned
to the caller over and over without raising an error.  Instead return
the LSN the slot has been advanced to.  With repetitive calls, the same
position is returned hence caller can directly monitor the difference in
progress in bytes by doing simply LSN difference calculations, which
should be monotonic.

Note that as the slot is owned by the backend advancing it, then the
read of those fields is fine lock-less, while updates need to happen
while the slot mutex is held, so fix that on the way as well.  Other
locks for in-memory data of replication slots have been already fixed
previously.

Some of those issues have been pointed out by Petr and Simon during the
patch, while I noticed some of them after looking at the code.  This
also visibly takes of a recently-discovered bug causing assertion
failures which can be triggered by a two-step slot forwarding which
first advanced the slot to a WAL page boundary and secondly advanced it
to the latest position, say 'FF/FFFFFFF' to make sure that the newest
LSN is used as forward point.  It would have been nice to drop a test
for that, but the set of operators working on pg_lsn limits it, so this
is left for a future exercise.

Author: Michael Paquier
Reviewed-by: Petr Jelinek, Simon Riggs
Discussion: https://postgr.es/m/CANP8+jLyS=X-CAk59BJnsxKQfjwrmKicHQykyn52Qj-Q=9GLCw@mail.gmail.com
Discussion: https://www.postgresql.org/message-id/2840048a-1184-417a-9da8-3299d207a1d7%40postgrespro.ru

6 years agoAssorted cosmetic cleanup of run-time-partition-pruning code.
Tom Lane [Sun, 10 Jun 2018 22:24:34 +0000 (18:24 -0400)]
Assorted cosmetic cleanup of run-time-partition-pruning code.

Use "subplan" rather than "subnode" to refer to the child plans of
a partitioning Append; this seems a bit more specific and hence
clearer.  Improve assorted comments.  No non-cosmetic changes.

David Rowley and Tom Lane

Discussion: https://postgr.es/m/CAFj8pRBjrufA3ocDm8o4LPGNye9Y+pm1b9kCwode4X04CULG3g@mail.gmail.com

6 years agoRelocate partition pruning structs to a saner place.
Tom Lane [Sun, 10 Jun 2018 20:30:14 +0000 (16:30 -0400)]
Relocate partition pruning structs to a saner place.

These struct definitions were originally dropped into primnodes.h,
which is a poor choice since that's mainly intended for primitive
expression node types; these are not in that category.  What they
are is auxiliary info in Plan trees, so move them to plannodes.h.

For consistency, also relocate some related code that was apparently
placed with the aid of a dartboard.

There's no interesting code changes in this commit, just reshuffling.

David Rowley and Tom Lane

Discussion: https://postgr.es/m/CAFj8pRBjrufA3ocDm8o4LPGNye9Y+pm1b9kCwode4X04CULG3g@mail.gmail.com

6 years agoImprove run-time partition pruning to handle any stable expression.
Tom Lane [Sun, 10 Jun 2018 19:22:25 +0000 (15:22 -0400)]
Improve run-time partition pruning to handle any stable expression.

The initial coding of the run-time-pruning feature only coped with cases
where the partition key(s) are compared to Params.  That is a bit silly;
we can allow it to work with any non-Var-containing stable expression, as
long as we take special care with expressions containing PARAM_EXEC Params.
The code is hardly any longer this way, and it's considerably clearer
(IMO at least).  Per gripe from Pavel Stehule.

David Rowley, whacked around a bit by me

Discussion: https://postgr.es/m/CAFj8pRBjrufA3ocDm8o4LPGNye9Y+pm1b9kCwode4X04CULG3g@mail.gmail.com

6 years agoFix grammar in REVOKE documentation
Michael Paquier [Sun, 10 Jun 2018 13:44:17 +0000 (22:44 +0900)]
Fix grammar in REVOKE documentation

Reported-by: Erwin Brandstetter
6 years agoFix and document lock handling for in-memory replication slot data
Michael Paquier [Fri, 1 Jun 2018 18:30:55 +0000 (14:30 -0400)]
Fix and document lock handling for in-memory replication slot data

While debugging issues on HEAD for the new slot forwarding feature of
Postgres 11, some monitoring of the code surrounding in-memory slot data
has proved that the lock handling may cause inconsistent data to be read
by read-only callers of slot functions, particularly
pg_get_replication_slots() which fetches data for the system view
pg_replication_slots, or modules looking directly at slot information.

The code paths involved in those problems concern logical decoding
initialization (down to 9.4) and WAL reservation for slots (new as of
10).

A set of comments documenting all the lock handlings, particularly the
dependency with LW locks for slots and the in_use flag as well as the
internal mutex lock is added, based on a suggested by Simon Riggs.

Some of the fixed code exists down to 9.4 where WAL decoding has been
introduced, but as those race conditions are really unlikely going to
happen as those concern code paths for slot and decoding creation, just
fix the problem on HEAD.

Author: Michael Paquier

Discussion: https://postgr.es/m/20180528085747.GA27845@paquier.xyz

6 years agoLimit Parallel Hash's bucket array to MaxAllocSize.
Thomas Munro [Sun, 10 Jun 2018 08:30:25 +0000 (20:30 +1200)]
Limit Parallel Hash's bucket array to MaxAllocSize.

Make sure that we don't exceed MaxAllocSize when increasing the number of
buckets.  Perhaps later we'll remove that limit and use DSA_ALLOC_HUGE, but
for now just prevent further increases like the non-parallel code.  This
change avoids the error from bug report #15225.

Author: Thomas Munro
Reviewed-By: Tom Lane
Reported-by: Frits Jalvingh
Discussion: https://postgr.es/m/152802081668.26724.16985037679312485972%40wrigleys.postgresql.org

6 years agoFix typo in JIT README.
Peter Geoghegan [Sat, 9 Jun 2018 16:33:53 +0000 (09:33 -0700)]
Fix typo in JIT README.

Author: Daniel Gustafsson
Discussion: https://postgr.es/m/3747D478-41F9-439F-8074-AC81A5C76346@yesql.se

6 years agoTeach SHOW ALL to honor pg_read_all_settings membership
Alvaro Herrera [Fri, 8 Jun 2018 20:18:40 +0000 (16:18 -0400)]
Teach SHOW ALL to honor pg_read_all_settings membership

Also, fix the pg_settings view to display source filename and line
number when invoked by a pg_read_all_settings member.  This addition by
me (Álvaro).

Also, fix wording of the comment in GetConfigOption regarding the
restriction it implements, renaming the parameter for extra clarity.
Noted by Michaël.

These were all oversight in commit 25fff40798fc; backpatch to pg10,
where that commit first appeared.

Author: Laurenz Albe
Reviewed-by: Michaël Paquier, Álvaro Herrera
Discussion: https://postgr.es/m/1519917758.6586.8.camel@cybertec.at

6 years agoFix typo
Peter Eisentraut [Fri, 8 Jun 2018 15:55:12 +0000 (11:55 -0400)]
Fix typo

6 years agoAdd missing serial commas
Peter Eisentraut [Fri, 8 Jun 2018 03:37:09 +0000 (23:37 -0400)]
Add missing serial commas

6 years agodoc: Move some new options into better positions on man pages
Peter Eisentraut [Fri, 8 Jun 2018 03:36:04 +0000 (23:36 -0400)]
doc: Move some new options into better positions on man pages

6 years agoecpg: Document new compatibility option
Peter Eisentraut [Fri, 8 Jun 2018 03:33:24 +0000 (23:33 -0400)]
ecpg: Document new compatibility option

It's listed in --help, so it should be listed in the man page as well.

6 years agoExclude VACUUMs from RunningXactData
Simon Riggs [Thu, 7 Jun 2018 19:38:12 +0000 (20:38 +0100)]
Exclude VACUUMs from RunningXactData

GetRunningTransactionData() should ignore VACUUM procs because in some
cases they are assigned xids. This could lead to holding back xmin via
the route of passing the xid to standby and then having that hold back
xmin on master via feedback.

Backpatch to 9.1 needed, but will only do so on supported versions.
Backpatch once proven on the buildfarm.

Reported-by: Greg Stark
Author: Simon Riggs
Reviewed-by: Amit Kapila
Discussion: https://postgr.es/m/CANP8+jJBYt=4PpTfiPb0UrH1_iPhzsxKH5Op_Wec634F0ohnAw@mail.gmail.com

6 years agoFix typo in README
Magnus Hagander [Thu, 7 Jun 2018 12:40:38 +0000 (14:40 +0200)]
Fix typo in README

Author: Daniel Gustafsson <daniel@yesql.se>

6 years agoFix obsolete comment.
Heikki Linnakangas [Thu, 7 Jun 2018 06:56:22 +0000 (09:56 +0300)]
Fix obsolete comment.

The 'orig_slot' argument was removed in commit c0a8ae7be392, but that
commit forgot to update the comment.

Author: Amit Langote
Discussion: https://www.postgresql.org/message-id/194ac4bf-7b4a-c887-bf26-bc1a85ea995a@lab.ntt.co.jp

6 years agoFix function code in error report
Alvaro Herrera [Wed, 6 Jun 2018 18:46:53 +0000 (14:46 -0400)]
Fix function code in error report

This bug causes a lseek() failure to be reported as a "could not open"
failure in the error message, muddling bug reports.  I introduced this
copy-and-pasteo in commit 78e122010422.

Noticed while reviewing code for bug report #15221, from lily liang.  In
version 10 the affected function is only used by multixact.c and
commit_ts, and only in corner-case circumstances, neither of which are
involved in the reported bug (a pg_subtrans failure.)

Author: Álvaro Herrera

6 years agoFix spurious non-ASCII bytes
Peter Eisentraut [Mon, 4 Jun 2018 20:17:34 +0000 (16:17 -0400)]
Fix spurious non-ASCII bytes

6 years agoFix typo
Peter Eisentraut [Mon, 4 Jun 2018 19:34:42 +0000 (15:34 -0400)]
Fix typo

6 years agoPut new command-line options into alphabetical order
Peter Eisentraut [Mon, 4 Jun 2018 19:03:15 +0000 (15:03 -0400)]
Put new command-line options into alphabetical order

6 years agoTweak partitioning documentation wording
Alvaro Herrera [Fri, 1 Jun 2018 18:54:43 +0000 (14:54 -0400)]
Tweak partitioning documentation wording

For clarity, precision, grammar.

Author: Justin Pryzby
Reviewed-by: Amit Langote, Álvaro Herrera
Discussion: https://postgr.es/m/20180523213513.GM30060@telsasoft.com

6 years agoReconcile nodes/*funcs.c with PostgreSQL 11 work.
Noah Misch [Thu, 31 May 2018 23:07:13 +0000 (16:07 -0700)]
Reconcile nodes/*funcs.c with PostgreSQL 11 work.

This covers new fields in two outfuncs.c functions having no readfuncs.c
counterpart.  Thus, this changes only debugging output.