]> granicus.if.org Git - postgresql/log
postgresql
8 years agoChange various deparsing functions to return NULL for invalid input.
Robert Haas [Tue, 26 Jul 2016 20:07:02 +0000 (16:07 -0400)]
Change various deparsing functions to return NULL for invalid input.

Previously, some functions returned various fixed strings and others
failed with a cache lookup error.  Per discussion, standardize on
returning NULL.  Although user-exposed "cache lookup failed" error
messages might normally qualify for bug-fix treatment, no back-patch;
the risk of breaking user code which is accustomed to the current
behavior seems too high.

Michael Paquier

8 years agoRepair damage done by citext--1.1--1.2.sql.
Robert Haas [Tue, 26 Jul 2016 19:32:57 +0000 (15:32 -0400)]
Repair damage done by citext--1.1--1.2.sql.

That script is incorrect in that it sets the combine function for
max(citext) twice instead of setting the combine function for
max(citext) once and the combine functon for min(citext) once.  The
consequence is that if you install 1.0 or 1.1 and then update to 1.2,
you end up with min(citext) not having a combine function, contrary to
what was intended.  If you install 1.2 directly, you're OK.

Fix things up by defining a new 1.3 version.  Upgrading from 1.2 to
1.3 won't change anything for people who first installed the 1.2
version, but people upgrading from 1.0 or 1.1 will get the right
catalog contents once they reach 1.3.

Report and patch by David Rowley, reviewed by Andreas Karlsson.

8 years agoFix constant-folding of ROW(...) IS [NOT] NULL with composite fields.
Tom Lane [Tue, 26 Jul 2016 19:25:02 +0000 (15:25 -0400)]
Fix constant-folding of ROW(...) IS [NOT] NULL with composite fields.

The SQL standard appears to specify that IS [NOT] NULL's tests of field
nullness are non-recursive, ie, we shouldn't consider that a composite
field with value ROW(NULL,NULL) is null for this purpose.
ExecEvalNullTest got this right, but eval_const_expressions did not,
leading to weird inconsistencies depending on whether the expression
was such that the planner could apply constant folding.

Also, adjust the docs to mention that IS [NOT] DISTINCT FROM NULL can be
used as a substitute test if a simple null check is wanted for a rowtype
argument.  That motivated reordering things so that IS [NOT] DISTINCT FROM
is described before IS [NOT] NULL.  In HEAD, I went a bit further and added
a table showing all the comparison-related predicates.

Per bug #14235.  Back-patch to all supported branches, since it's certainly
undesirable that constant-folding should change the semantics.

Report and patch by Andrew Gierth; assorted wordsmithing and revised
regression test cases by me.

Report: <20160708024746.1410.57282@wrigleys.postgresql.org>

8 years agoFix improper example of using psql() function in TAP tests documentation.
Fujii Masao [Tue, 26 Jul 2016 12:17:38 +0000 (21:17 +0900)]
Fix improper example of using psql() function in TAP tests documentation.

In an example of TAP test scripts, there is the test checking whether
the result of the query is expected or not. But, in previous example,
the exit code of psql instead of the query result was checked unexpectedly.

Author: Ildar Musin

8 years agoFix typo
Peter Eisentraut [Tue, 26 Jul 2016 02:07:53 +0000 (22:07 -0400)]
Fix typo

8 years agoMessage style improvements
Peter Eisentraut [Tue, 26 Jul 2016 02:07:44 +0000 (22:07 -0400)]
Message style improvements

8 years agoFix typo in comment.
Fujii Masao [Mon, 25 Jul 2016 08:51:26 +0000 (17:51 +0900)]
Fix typo in comment.

Author: Masahiko Sawada

8 years agoGive recovery tests more time to finish
Alvaro Herrera [Mon, 25 Jul 2016 05:34:35 +0000 (01:34 -0400)]
Give recovery tests more time to finish

These tests are currently only running in buildfarm member hamster,
which is purposefully very slow.  This suite has failed a couple of
times recently because of timeouts, so increase the allowed number of
iterations to avoid spurious failures.

Author: Michaël Paquier

8 years agoMake the AIX case of Makefile.shlib safe for parallel make.
Noah Misch [Sun, 24 Jul 2016 00:30:03 +0000 (20:30 -0400)]
Make the AIX case of Makefile.shlib safe for parallel make.

Use our typical approach, from src/backend/parser.  Back-patch to 9.1
(all supported versions).

8 years agoCorrectly set up aggregate FILTER expression in partial-aggregation plans.
Tom Lane [Sun, 24 Jul 2016 00:16:48 +0000 (20:16 -0400)]
Correctly set up aggregate FILTER expression in partial-aggregation plans.

The aggfilter expression should be removed from the parent (combining)
Aggref, since it's not supposed to apply the filter, and indeed cannot
because any Vars used in the filter would not be available after the
lower-level aggregation step.  Per report from Jeff Janes.

(This has been broken since the introduction of partial aggregation,
I think.  The error became obvious after commit 59a3795c2, when setrefs.c
began processing the parent Aggref's fields normally and thus would detect
such Vars.  The special-case coding previously used in setrefs.c skipped
over the parent's aggfilter field without processing it.  That was broken
in its own way because no other setrefs.c processing got applied either;
though since the executor would not execute the filter expression, only
initialize it, that oversight might not have had any visible symptoms at
present.)

Report: <CAMkU=1xfuPf2edAe4ZGXTmJpU7jxuKukKyvNtEXwu35B7dvejg@mail.gmail.com>

8 years agoFix regression tests to work in Welsh locale.
Tom Lane [Fri, 22 Jul 2016 19:41:39 +0000 (15:41 -0400)]
Fix regression tests to work in Welsh locale.

Welsh (cy_GB) apparently sorts 'dd' after 'f', creating problems
analogous to the odd sorting of 'aa' in Danish.  Adjust regression
test case to not use data that provokes that.

Jeff Janes

Patch: <CAMkU=1zx-pqcfSApL2pYDQurPOCfcYU0wJorsmY1OrYPiXRbLw@mail.gmail.com>

8 years agoRemove GetUserMappingId() and GetUserMappingById().
Tom Lane [Fri, 22 Jul 2016 15:32:23 +0000 (11:32 -0400)]
Remove GetUserMappingId() and GetUserMappingById().

These functions were added in commits fbe5a3fb7 and a104a017f,
but commit 45639a052 removed their only callers.  Put the related
code in foreign.c back to the way it was in 9.5, to avoid pointless
cross-version diffs.

Etsuro Fujita

Patch: <d674a3f1-6b63-519c-ef3f-f3188ed6a178@lab.ntt.co.jp>

8 years agoMake contrib regression tests safe for Danish locale.
Tom Lane [Thu, 21 Jul 2016 20:52:35 +0000 (16:52 -0400)]
Make contrib regression tests safe for Danish locale.

In btree_gin and citext, avoid some not-particularly-interesting
dependencies on the sorting of 'aa'.  In tsearch2, use COLLATE "C" to
remove an uninteresting dependency on locale sort order (and thereby
allow removal of a variant expected-file).

Also, in citext, avoid assuming that lower('I') = 'i'.  This isn't relevant
to Danish but it does fail in Turkish.

8 years agoMake pltcl regression tests safe for Danish locale.
Tom Lane [Thu, 21 Jul 2016 18:24:07 +0000 (14:24 -0400)]
Make pltcl regression tests safe for Danish locale.

Another peculiarity of Danish locale is that it has an unusual idea
of how to sort upper vs. lower case.  One of the pltcl test cases has
an issue with that.  Now that COLLATE works in all supported branches,
we can just change the test to be locale-independent, and get rid of
the variant expected file that used to support non-C locales.

8 years agoMake core regression tests safe for Danish locale.
Tom Lane [Thu, 21 Jul 2016 17:11:00 +0000 (13:11 -0400)]
Make core regression tests safe for Danish locale.

Some tests added in 9.5 depended on 'aa' sorting before 'bb', which
doesn't hold true in Danish.  Use slightly different test data to
avoid the problem.

Jeff Janes

Report: <CAMkU=1w-cEDbA+XHdNb=YS_4wvZbs66Ni9KeSJKAJGNJyOsgQw@mail.gmail.com>

8 years agoRemove unused structure member.
Robert Haas [Thu, 21 Jul 2016 15:53:44 +0000 (11:53 -0400)]
Remove unused structure member.

Michael Paquier

8 years agoFix typos
Magnus Hagander [Wed, 20 Jul 2016 08:39:18 +0000 (10:39 +0200)]
Fix typos

Alexander Law

8 years agoRemove very-obsolete estimates of shmem usage from postgresql.conf.sample.
Tom Lane [Tue, 19 Jul 2016 22:41:30 +0000 (18:41 -0400)]
Remove very-obsolete estimates of shmem usage from postgresql.conf.sample.

runtime.sgml used to contain a table of estimated shared memory consumption
rates for max_connections and some other GUCs.  Commit 390bfc643 removed
that on the well-founded grounds that (a) we weren't maintaining the
entries well and (b) it no longer mattered so much once we got out from
under SysV shmem limits.  But it missed that there were even-more-obsolete
versions of some of those numbers in comments in postgresql.conf.sample.
Remove those too.  Back-patch to 9.3 where the aforesaid commit went in.

8 years agoAdd comment & docs about no vacuum truncation with sto.
Kevin Grittner [Tue, 19 Jul 2016 21:25:53 +0000 (16:25 -0500)]
Add comment & docs about no vacuum truncation with sto.

Omission noted by Andres Freund.

8 years agoStamp 9.6beta3. REL9_6_BETA3
Tom Lane [Mon, 18 Jul 2016 20:54:26 +0000 (16:54 -0400)]
Stamp 9.6beta3.

8 years agoDoc: improve discussion of plpgsql's GET DIAGNOSTICS, other minor fixes.
Tom Lane [Mon, 18 Jul 2016 20:52:06 +0000 (16:52 -0400)]
Doc: improve discussion of plpgsql's GET DIAGNOSTICS, other minor fixes.

9.4 added a second description of GET DIAGNOSTICS that was totally
independent of the existing one, resulting in each description lying to the
extent that it claimed the set of status items it described was complete.
Fix that, and do some minor markup improvement.

Also some other small fixes per bug #14258 from Dilian Palauzov.

Discussion: <20160718181437.1414.40802@wrigleys.postgresql.org>

8 years agoDoc: fix table of BRIN operator strategy numbers.
Tom Lane [Mon, 18 Jul 2016 17:32:45 +0000 (13:32 -0400)]
Doc: fix table of BRIN operator strategy numbers.

brin-extensibility-inclusion-table was confused in places about the
difference between strategy 4 (RTOverRight) and strategy 5 (RTRight).

Alexander Law

8 years agoFix typos in comments and debug message
Magnus Hagander [Mon, 18 Jul 2016 16:46:57 +0000 (18:46 +0200)]
Fix typos in comments and debug message

Antonin Houska

8 years agoTranslation updates
Peter Eisentraut [Mon, 18 Jul 2016 16:07:49 +0000 (12:07 -0400)]
Translation updates

Source-Git-URL: git://git.postgresql.org/git/pgtranslation/messages.git
Source-Git-Hash: 3d71988dffd3c0798a8864c55ca4b7833b48abb1

8 years agoClear all-frozen visibilitymap status when locking tuples.
Andres Freund [Mon, 18 Jul 2016 09:01:13 +0000 (02:01 -0700)]
Clear all-frozen visibilitymap status when locking tuples.

Since a892234 & fd31cd265 the visibilitymap's freeze bit is used to
avoid vacuuming the whole relation in anti-wraparound vacuums. Doing so
correctly relies on not adding xids to the heap without also unsetting
the visibilitymap flag.  Tuple locking related code has not done so.

To allow selectively resetting all-frozen - to avoid pessimizing
heap_lock_tuple - allow to selectively reset the all-frozen with
visibilitymap_clear(). To avoid having to use
visibilitymap_get_status (e.g. via VM_ALL_FROZEN) inside a critical
section, have visibilitymap_clear() return whether any bits have been
reset.

There's a remaining issue (denoted by XXX): After the PageIsAllVisible()
check in heap_lock_tuple() and heap_lock_updated_tuple_rec() the page
status could theoretically change. Practically that currently seems
impossible, because updaters will hold a page level pin already.  Due to
the next beta coming up, it seems better to get the required WAL magic
bump done before resolving this issue.

The added flags field fields to xl_heap_lock and xl_heap_lock_updated
require bumping the WAL magic. Since there's already been a catversion
bump since the last beta, that's not an issue.

Reviewed-By: Robert Haas, Amit Kapila and Andres Freund
Author: Masahiko Sawada, heavily revised by Andres Freund
Discussion: CAEepm=3fWAbWryVW9swHyLTY4sXVf0xbLvXqOwUoDiNCx9mBjQ@mail.gmail.com
Backpatch: -

8 years agoRemove obsolete comment.
Tom Lane [Sun, 17 Jul 2016 23:18:19 +0000 (19:18 -0400)]
Remove obsolete comment.

Peter Geoghegan

8 years agoEstablish conventions about global object names used in regression tests.
Tom Lane [Sun, 17 Jul 2016 22:42:31 +0000 (18:42 -0400)]
Establish conventions about global object names used in regression tests.

To ensure that "make installcheck" can be used safely against an existing
installation, we need to be careful about what global object names
(database, role, and tablespace names) we use; otherwise we might
accidentally clobber important objects.  There's been a weak consensus that
test databases should have names including "regression", and that test role
names should start with "regress_", but we didn't have any particular rule
about tablespace names; and neither of the other rules was followed with
any consistency either.

This commit moves us a long way towards having a hard-and-fast rule that
regression test databases must have names including "regression", and that
test role and tablespace names must start with "regress_".  It's not
completely there because I did not touch some test cases in rolenames.sql
that test creation of special role names like "session_user".  That will
require some rethinking of exactly what we want to test, whereas the intent
of this patch is just to hit all the cases in which the needed renamings
are cosmetic.

There is no enforcement mechanism in this patch either, but if we don't
add one we can expect that the tests will soon be violating the convention
again.  Again, that's not such a cosmetic change and it will require
discussion.  (But I did use a quick-hack enforcement patch to find these
cases.)

Discussion: <16638.1468620817@sss.pgh.pa.us>

8 years agodoc: Supply XSLT template for superscript element in man pages
Peter Eisentraut [Sun, 17 Jul 2016 21:01:07 +0000 (17:01 -0400)]
doc: Supply XSLT template for superscript element in man pages

The default is no decoration, which looks confusing, for example on the
CREATE SEQUENCE man page.

8 years agoUse correct symbol for minimum int64 value
Peter Eisentraut [Sun, 17 Jul 2016 13:15:37 +0000 (09:15 -0400)]
Use correct symbol for minimum int64 value

The old code used SEQ_MINVALUE to get the smallest int64 value.  This
was done as a convenience to avoid having to deal with INT64_IS_BUSTED,
but that is obsolete now.  Also, it is incorrect because the smallest
int64 value is actually SEQ_MINVALUE-1.  Fix by using PG_INT64_MIN.

8 years agoCorrectly dump database and tablespace ACLs
Stephen Frost [Sun, 17 Jul 2016 13:04:46 +0000 (09:04 -0400)]
Correctly dump database and tablespace ACLs

Dump out the appropriate GRANT/REVOKE commands for databases and
tablespaces from pg_dumpall to replicate what the current state is.

This was broken during the changes to buildACLCommands for 9.6+
servers for pg_init_privs.

8 years agoUpdate 9.6 release notes through today.
Tom Lane [Sat, 16 Jul 2016 22:39:47 +0000 (18:39 -0400)]
Update 9.6 release notes through today.

8 years agoImprove test case exercising the sorting path for hash index build.
Tom Lane [Sat, 16 Jul 2016 20:25:43 +0000 (16:25 -0400)]
Improve test case exercising the sorting path for hash index build.

On second thought, we should probably do at least a minimal check that
the constructed index is valid, since the big problem with the most
recent breakage was not whether the sorting was correct but that the
index had incorrect hash codes placed in it.

8 years agoAdd regression test case exercising the sorting path for hash index build.
Tom Lane [Sat, 16 Jul 2016 19:30:15 +0000 (15:30 -0400)]
Add regression test case exercising the sorting path for hash index build.

We've broken this code path at least twice in the past, so it's prudent
to have a test case that covers it.  To allow exercising the code path
without creating a very large (and slow to run) test case, redefine the
sort threshold to be bounded by maintenance_work_mem as well as the number
of available buffers.  While at it, fix an ancient oversight that when
building a temp index, the number of available buffers is not NBuffers but
NLocBuffer.  Also, if assertions are enabled, apply a direct test that the
sort actually does return the tuples in the expected order.

Peter Geoghegan

Patch: <CAM3SWZTBAo4hjbBd780+MrOKiKp_TMo1N3A0Rw9_im8gbD7fQA@mail.gmail.com>

8 years agoFix crash in close_ps() for NaN input coordinates.
Tom Lane [Sat, 16 Jul 2016 18:42:37 +0000 (14:42 -0400)]
Fix crash in close_ps() for NaN input coordinates.

The Assert() here seems unreasonably optimistic.  Andreas Seltenreich
found that it could fail with NaNs in the input geometries, and it
seems likely to me that it might fail in corner cases due to roundoff
error, even for ordinary input values.  As a band-aid, make the function
return SQL NULL instead of crashing.

Report: <87d1md1xji.fsf@credativ.de>

8 years agoClarify usage of clientcert authentication option.
Tom Lane [Sat, 16 Jul 2016 18:12:44 +0000 (14:12 -0400)]
Clarify usage of clientcert authentication option.

For some reason this option wasn't discussed at all in client-auth.sgml.
Document it there, and be more explicit about its relationship to the
"cert" authentication method.  Per gripe from Srikanth Venkatesh.

I failed to resist the temptation to do some minor wordsmithing in the
same area, too.

Discussion: <20160713110357.1410.30407@wrigleys.postgresql.org>

8 years agoAdvance PG_CONTROL_VERSION.
Tom Lane [Sat, 16 Jul 2016 16:49:14 +0000 (12:49 -0400)]
Advance PG_CONTROL_VERSION.

This should have been done in commit 73c986adde5d73a5 which added several
new fields to pg_control, and again in commit 5028f22f6eb05798 which
changed the CRC algorithm, but it wasn't.  It's far too late to fix it in
the 9.5 branch, but let's do so in 9.6, so that if a 9.6 postmaster is
started against a 9.4-era pg_control it will complain about a versioning
problem rather than a CRC failure.  We already forced initdb/pg_upgrade
for beta3, so there's no downside to doing this now.

Discussion: <7615.1468598094@sss.pgh.pa.us>

8 years agoFix torn-page, unlogged xid and further risks from heap_update().
Andres Freund [Sat, 16 Jul 2016 00:49:48 +0000 (17:49 -0700)]
Fix torn-page, unlogged xid and further risks from heap_update().

When heap_update needs to look for a page for the new tuple version,
because the current one doesn't have sufficient free space, or when
columns have to be processed by the tuple toaster, it has to release the
lock on the old page during that. Otherwise there'd be lock ordering and
lock nesting issues.

To avoid concurrent sessions from trying to update / delete / lock the
tuple while the page's content lock is released, the tuple's xmax is set
to the current session's xid.

That unfortunately was done without any WAL logging, thereby violating
the rule that no XIDs may appear on disk, without an according WAL
record.  If the database were to crash / fail over when the page level
lock is released, and some activity lead to the page being written out
to disk, the xid could end up being reused; potentially leading to the
row becoming invisible.

There might be additional risks by not having t_ctid point at the tuple
itself, without having set the appropriate lock infomask fields.

To fix, compute the appropriate xmax/infomask combination for locking
the tuple, and perform WAL logging using the existing XLOG_HEAP_LOCK
record. That allows the fix to be backpatched.

This issue has existed for a long time. There appears to have been
partial attempts at preventing dangers, but these never have fully been
implemented, and were removed a long time ago, in
11919160 (cf. HEAP_XMAX_UNLOGGED).

In master / 9.6, there's an additional issue, namely that the
visibilitymap's freeze bit isn't reset at that point yet. Since that's a
new issue, introduced only in a892234f830, that'll be fixed in a
separate commit.

Author: Masahiko Sawada and Andres Freund
Reported-By: Different aspects by Thomas Munro, Noah Misch, and others
Discussion: CAEepm=3fWAbWryVW9swHyLTY4sXVf0xbLvXqOwUoDiNCx9mBjQ@mail.gmail.com
Backpatch: 9.1/all supported versions

8 years agoMake HEAP_LOCK/HEAP2_LOCK_UPDATED replay reset HEAP_XMAX_INVALID.
Andres Freund [Fri, 15 Jul 2016 21:37:06 +0000 (14:37 -0700)]
Make HEAP_LOCK/HEAP2_LOCK_UPDATED replay reset HEAP_XMAX_INVALID.

0ac5ad5 started to compress infomask bits in WAL records. Unfortunately
the replay routines for XLOG_HEAP_LOCK/XLOG_HEAP2_LOCK_UPDATED forgot to
reset the HEAP_XMAX_INVALID (and some other) hint bits.

Luckily that's not problematic in the majority of cases, because after a
crash/on a standby row locks aren't meaningful. Unfortunately that does
not hold true in the presence of prepared transactions. This means that
after a crash, or after promotion, row level locks held by a prepared,
but not yet committed, prepared transaction might not be enforced.

Discussion: 20160715192319.ubfuzim4zv3rqnxv@alap3.anarazel.de
Backpatch: 9.3, the oldest branch on which 0ac5ad5 is present.

8 years agoAvoid invalidating all foreign-join cached plans when user mappings change.
Tom Lane [Fri, 15 Jul 2016 21:22:56 +0000 (17:22 -0400)]
Avoid invalidating all foreign-join cached plans when user mappings change.

We must not push down a foreign join when the foreign tables involved
should be accessed under different user mappings.  Previously we tried
to enforce that rule literally during planning, but that meant that the
resulting plans were dependent on the current contents of the
pg_user_mapping catalog, and we had to blow away all cached plans
containing any remote join when anything at all changed in pg_user_mapping.
This could have been improved somewhat, but the fact that a syscache inval
callback has very limited info about what changed made it hard to do better
within that design.  Instead, let's change the planner to not consider user
mappings per se, but to allow a foreign join if both RTEs have the same
checkAsUser value.  If they do, then they necessarily will use the same
user mapping at runtime, and we don't need to know specifically which one
that is.  Post-plan-time changes in pg_user_mapping no longer require any
plan invalidation.

This rule does give up some optimization ability, to wit where two foreign
table references come from views with different owners or one's from a view
and one's directly in the query, but nonetheless the same user mapping
would have applied.  We'll sacrifice the first case, but to not regress
more than we have to in the second case, allow a foreign join involving
both zero and nonzero checkAsUser values if the nonzero one is the same as
the prevailing effective userID.  In that case, mark the plan as only
runnable by that userID.

The plancache code already had a notion of plans being userID-specific,
in order to support RLS.  It was a little confused though, in particular
lacking clarity of thought as to whether it was the rewritten query or just
the finished plan that's dependent on the userID.  Rearrange that code so
that it's clearer what depends on which, and so that the same logic applies
to both RLS-injected role dependency and foreign-join-injected role
dependency.

Note that this patch doesn't remove the other issue mentioned in the
original complaint, which is that while we'll reliably stop using a foreign
join if it's disallowed in a new context, we might fail to start using a
foreign join if it's now allowed, but we previously created a generic
cached plan that didn't use one.  It was agreed that the chance of winning
that way was not high enough to justify the much larger number of plan
invalidations that would have to occur if we tried to cause it to happen.

In passing, clean up randomly-varying spelling of EXPLAIN commands in
postgres_fdw.sql, and fix a COSTS ON example that had been allowed to
leak into the committed tests.

This reverts most of commits fbe5a3fb7 and 5d4171d1c, which were the
previous attempt at ensuring we wouldn't push down foreign joins that
span permissions contexts.

Etsuro Fujita and Tom Lane

Discussion: <d49c1e5b-f059-20f4-c132-e9752ee0113e@lab.ntt.co.jp>

8 years agoAvoid serializability errors when locking a tuple with a committed update
Alvaro Herrera [Fri, 15 Jul 2016 18:17:20 +0000 (14:17 -0400)]
Avoid serializability errors when locking a tuple with a committed update

When key-share locking a tuple that has been not-key-updated, and the
update is a committed transaction, in some cases we raised
serializability errors:
    ERROR:  could not serialize access due to concurrent update

Because the key-share doesn't conflict with the update, the error is
unnecessary and inconsistent with the case that the update hasn't
committed yet.  This causes problems for some usage patterns, even if it
can be claimed that it's sufficient to retry the aborted transaction:
given a steady stream of updating transactions and a long locking
transaction, the long transaction can be starved indefinitely despite
multiple retries.

To fix, we recognize that HeapTupleSatisfiesUpdate can return
HeapTupleUpdated when an updating transaction has committed, and that we
need to deal with that case exactly as if it were a non-committed
update: verify whether the two operations conflict, and if not, carry on
normally.  If they do conflict, however, there is a difference: in the
HeapTupleBeingUpdated case we can just sleep until the concurrent
transaction is gone, while in the HeapTupleUpdated case this is not
possible and we must raise an error instead.

Per trouble report from Olivier Dony.

In addition to a couple of test cases that verify the changed behavior,
I added a test case to verify the behavior that remains unchanged,
namely that errors are raised when a update that modifies the key is
used.  That must still generate serializability errors.  One
pre-existing test case changes behavior; per discussion, the new
behavior is actually the desired one.

Discussion: https://www.postgresql.org/message-id/560AA479.4080807@odoo.com
  https://www.postgresql.org/message-id/20151014164844.3019.25750@wrigleys.postgresql.org

Backpatch to 9.3, where the problem appeared.

8 years agoFix parsing NOT sequence in tsquery
Teodor Sigaev [Fri, 15 Jul 2016 17:01:41 +0000 (20:01 +0300)]
Fix parsing NOT sequence in tsquery

Digging around bug #14245 I found that commit
6734a1cacd44f5b731933cbc93182b135b167d0c missed that NOT operation is
right associative in opposite to all other. This miss is resposible for
tsquery parser fail on sequence of NOT operations

8 years agoFix nested NOT operation cleanup in tsquery.
Teodor Sigaev [Fri, 15 Jul 2016 16:22:18 +0000 (19:22 +0300)]
Fix nested NOT operation cleanup in tsquery.

During normalization of tsquery tree it tries to simplify nested NOT
operations but there it's obvioulsy missed that subsequent node could be
a leaf node (value node)

Bug #14245: Segfault on weird to_tsquery
Reported by David Kellum.

8 years agoImprove documentation about search_path for SECURITY DEFINER functions.
Tom Lane [Fri, 15 Jul 2016 14:58:39 +0000 (10:58 -0400)]
Improve documentation about search_path for SECURITY DEFINER functions.

Clarify that the reason for recommending that pg_temp be put last is to
prevent temporary tables from capturing unqualified table names.  Per
discussion with Albe Laurenz.

Discussion: <A737B7A37273E048B164557ADEF4A58B5386C6E1@ntex2010i.host.magwien.gv.at>

8 years agoAdjust spellings of forms of "cancel"
Peter Eisentraut [Fri, 15 Jul 2016 02:48:26 +0000 (22:48 -0400)]
Adjust spellings of forms of "cancel"

8 years agodoc: Fix typos
Peter Eisentraut [Fri, 15 Jul 2016 02:28:58 +0000 (22:28 -0400)]
doc: Fix typos

From: Alexander Law <exclusion@gmail.com>

8 years agoFix GiST index build for NaN values in geometric types.
Tom Lane [Thu, 14 Jul 2016 22:45:59 +0000 (18:45 -0400)]
Fix GiST index build for NaN values in geometric types.

GiST index build could go into an infinite loop when presented with boxes
(or points, circles or polygons) containing NaN component values.  This
happened essentially because the code assumed that x == x is true for any
"double" value x; but it's not true for NaNs.  The looping behavior was not
the only problem though: we also attempted to sort the items using simple
double comparisons.  Since NaNs violate the trichotomy law, qsort could
(in principle at least) get arbitrarily confused and mess up the sorting of
ordinary values as well as NaNs.  And we based splitting choices on box size
calculations that could produce NaNs, again resulting in undesirable
behavior.

To fix, replace all comparisons of doubles in this logic with
float8_cmp_internal, which is NaN-aware and is careful to sort NaNs
consistently, higher than any non-NaN.  Also rearrange the box size
calculation to not produce NaNs; instead it should produce an infinity
for a box with NaN on one side and not-NaN on the other.

I don't by any means claim that this solves all problems with NaNs in
geometric values, but it should at least make GiST index insertion work
reliably with such data.  It's likely that the index search side of things
still needs some work, and probably regular geometric operations too.
But with this patch we're laying down a convention for how such cases
ought to behave.

Per bug #14238 from Guang-Dih Lei.  Back-patch to 9.2; the code used before
commit 7f3bd86843e5aad8 is quite different and doesn't lock up on my simple
test case, nor on the submitter's dataset.

Report: <20160708151747.1426.60150@wrigleys.postgresql.org>
Discussion: <28685.1468246504@sss.pgh.pa.us>

8 years agoRemove reference to range mode in pg_xlogdump error
Magnus Hagander [Thu, 14 Jul 2016 13:39:01 +0000 (15:39 +0200)]
Remove reference to range mode in pg_xlogdump error

pg_xlogdump doesn't have any other mode, so it's just confusing to
include this in the error message as it indicates there might be another
mode.

8 years agoMinor test adjustment.
Tom Lane [Wed, 13 Jul 2016 19:36:25 +0000 (15:36 -0400)]
Minor test adjustment.

Dept of second thoughts: given the RESET SESSION AUTHORIZATION that
was just added by commit cec550139, we don't need the reconnection
that used to be here.  Might as well buy back a few microseconds.

8 years agoAdd a regression test case to improve code coverage for tuplesort.
Tom Lane [Wed, 13 Jul 2016 19:23:56 +0000 (15:23 -0400)]
Add a regression test case to improve code coverage for tuplesort.

Test the external-sort code path in CLUSTER for two different scenarios:
multiple-pass external sorting, and the best case for replacement
selection, where only one run is produced, so that no merge is required.
This test would have caught the bug fixed in commit 1b0fc8507, at
least when run with valgrind enabled.

In passing, add a short-circuit test in plan_cluster_use_sort() to make
dead certain that it selects sorting when enable_indexscan is off.  As
things stand, that would happen anyway, but it seems like good future
proofing for this test.

Peter Geoghegan

Discussion: <CAM3SWZSgxehDkDMq1FdiW2A0Dxc79wH0hz1x-TnGy=1BXEL+nw@mail.gmail.com>

8 years agoFix obsolete header-file reference in pg_buffercache docs.
Tom Lane [Wed, 13 Jul 2016 15:17:15 +0000 (11:17 -0400)]
Fix obsolete header-file reference in pg_buffercache docs.

Commit 2d0019049 moved enum ForkNumber from relfilenode.h into relpath.h,
but missed updating this documentation reference.

Alexander Law

8 years agoAdd missing hyphen
Stephen Frost [Wed, 13 Jul 2016 13:17:35 +0000 (09:17 -0400)]
Add missing hyphen

Pointed out by Alexander Law

8 years agoAdd serial comma and quoting to message
Peter Eisentraut [Tue, 12 Jul 2016 22:37:34 +0000 (18:37 -0400)]
Add serial comma and quoting to message

8 years agoPut some things in a better order in psql help
Peter Eisentraut [Tue, 12 Jul 2016 22:10:16 +0000 (18:10 -0400)]
Put some things in a better order in psql help

8 years agoAllow IMPORT FOREIGN SCHEMA within pl/pgsql.
Tom Lane [Tue, 12 Jul 2016 22:06:50 +0000 (18:06 -0400)]
Allow IMPORT FOREIGN SCHEMA within pl/pgsql.

Since IMPORT FOREIGN SCHEMA has an INTO clause, pl/pgsql needs to be
aware of that and avoid capturing the INTO as an INTO-variables clause.
This isn't hard, though it's annoying to have to make IMPORT a plpgsql
keyword just for this.  (Fortunately, we have the infrastructure now
to make it an unreserved keyword, so at least this shouldn't break any
existing pl/pgsql code.)

Per report from Merlin Moncure.  Back-patch to 9.5 where IMPORT FOREIGN
SCHEMA was introduced.

Report: <CAHyXU0wpHf2bbtKGL1gtUEFATCY86r=VKxfcACVcTMQ70mCyig@mail.gmail.com>

8 years agodoc: Fix typo
Peter Eisentraut [Tue, 12 Jul 2016 17:30:48 +0000 (13:30 -0400)]
doc: Fix typo

From: Alexander Law <exclusion@gmail.com>

8 years agoPrint a given subplan only once in EXPLAIN.
Tom Lane [Mon, 11 Jul 2016 22:14:29 +0000 (18:14 -0400)]
Print a given subplan only once in EXPLAIN.

We have, for a very long time, allowed the same subplan (same member of the
PlannedStmt.subplans list) to be referenced by more than one SubPlan node;
this avoids problems for cases such as subplans within an IndexScan's
indxqual and indxqualorig fields.  However, EXPLAIN had not gotten the memo
and would print each reference as though it were an independent identical
subplan.  To fix, track plan_ids of subplans we've printed and don't print
the same plan_id twice.  Per report from Pavel Stehule.

BTW: the particular case of IndexScan didn't cause visible duplication
in a plain EXPLAIN, only EXPLAIN ANALYZE, because in the former case we
short-circuit executor startup before the indxqual field is processed by
ExecInitExpr.  That seems like it could easily lead to other EXPLAIN
problems in future, but it's not clear how to avoid it without breaking
the "EXPLAIN a plan using hypothetical indexes" use-case.  For now I've
left that issue alone.

Although this is a longstanding bug, it's purely cosmetic (no great harm
is done by the repeat printout) and we haven't had field complaints before.
So I'm hesitant to back-patch it, especially since there is some small risk
of ABI problems due to the need to add a new field to ExplainState.

In passing, rearrange order of fields in ExplainState to be less random,
and update some obsolete comments about when/where to initialize them.

Report: <CAFj8pRAimq+NK-menjt+3J4-LFoodDD8Or6=Lc_stcFD+eD4DA@mail.gmail.com>

8 years agoImprove output of psql's \df+ command.
Tom Lane [Mon, 11 Jul 2016 16:35:03 +0000 (12:35 -0400)]
Improve output of psql's \df+ command.

Add display of proparallel (parallel-safety) when the server is >= 9.6,
and display of proacl (access privileges) for all server versions.
Minor tweak of column ordering to keep related columns together.

Michael Paquier

Discussion: <CAB7nPqTR3Vu3xKOZOYqSm-+bSZV0kqgeGAXD6w5GLbkbfd5Q6w@mail.gmail.com>

8 years agodoc: Update URL for PL/PHP
Peter Eisentraut [Mon, 11 Jul 2016 16:10:10 +0000 (12:10 -0400)]
doc: Update URL for PL/PHP

8 years agoAdd missing newline in error message
Magnus Hagander [Mon, 11 Jul 2016 11:53:17 +0000 (13:53 +0200)]
Add missing newline in error message

8 years agoFix start WAL filename for concurrent backups from standby
Magnus Hagander [Mon, 11 Jul 2016 10:02:31 +0000 (12:02 +0200)]
Fix start WAL filename for concurrent backups from standby

On a standby, ThisTimelineID is always 0, so we would generate a
filename in timeline 0 even for other timelines. Instead, use starttli
which we have retreived from the controlfile.

Report by: Francesco Canovai in bug #14230
Author: Marco Nenciarini
Reviewed by: Michael Paquier and Amit Kapila

8 years agoRevert "Add some temporary code to record stack usage at server process exit."
Tom Lane [Sun, 10 Jul 2016 16:44:20 +0000 (12:44 -0400)]
Revert "Add some temporary code to record stack usage at server process exit."

This reverts commit 88cf37d2a86d5b66380003d7c3384530e3f91e40 as well
as follow-on commits ea9c4a16d5ad88a1d28d43ef458e3209b53eb106 and
c57562725d219c4249b82f4a4fb5aaeee3ae0d53.  We've learned about as much
as we can from the buildfarm.

8 years agoFix TAP tests and MSVC scripts for pathnames with spaces.
Tom Lane [Sat, 9 Jul 2016 20:47:38 +0000 (16:47 -0400)]
Fix TAP tests and MSVC scripts for pathnames with spaces.

Change assorted places in our Perl code that did things like
system("prog $path/file");
to do it more like
system('prog', "$path/file");
which is safe against spaces and other special characters in the path
variable.  The latter was already the prevailing style, but a few bits
of code hadn't gotten this memo.  Back-patch to 9.4 as relevant.

Michael Paquier, Kyotaro Horiguchi

Discussion: <20160704.160213.111134711.horiguchi.kyotaro@lab.ntt.co.jp>

8 years agoImprove recording of IA64 stack data.
Tom Lane [Sat, 9 Jul 2016 19:00:22 +0000 (15:00 -0400)]
Improve recording of IA64 stack data.

Examination of the results from anole and gharial suggests that we're
only managing to track the size of one of the two stacks of IA64 machines.
Some googling gave the answer: on HPUX11, the register stack is reported
as a page type I don't see in pstat.h on my HPUX10 box.  Let's try
testing for that.

8 years agoAdd more temporary code to record stack usage at server process exit.
Tom Lane [Fri, 8 Jul 2016 20:38:22 +0000 (16:38 -0400)]
Add more temporary code to record stack usage at server process exit.

After a look at preliminary results from commit 88cf37d2a86d5b66,
I realized it'd be a good idea to spew out the maximum depth measurement
seen by check_stack_depth.  So add some quick-n-dirty code to do that.
Like the previous commit, this will be reverted once we've gathered
a set of buildfarm runs with it.

8 years agoDocs: minor improvements for documentation about plpgsql triggers.
Tom Lane [Fri, 8 Jul 2016 17:23:09 +0000 (13:23 -0400)]
Docs: minor improvements for documentation about plpgsql triggers.

Fabien Coelho, some further wordsmithing by me

8 years agoDocs: improve examples about not repeating table name in UPDATE ... SET.
Tom Lane [Fri, 8 Jul 2016 16:46:04 +0000 (12:46 -0400)]
Docs: improve examples about not repeating table name in UPDATE ... SET.

Alexander Law

8 years agoDocs: typo fix.
Tom Lane [Fri, 8 Jul 2016 16:40:51 +0000 (12:40 -0400)]
Docs: typo fix.

Etsuro Fujita

8 years agoAdd some temporary code to record stack usage at server process exit.
Tom Lane [Fri, 8 Jul 2016 16:01:08 +0000 (12:01 -0400)]
Add some temporary code to record stack usage at server process exit.

This patch is meant to gather information from the buildfarm members, and
will be reverted in a day or so.  The idea is to try to find out the
high-water stack consumption while running the regression tests,
particularly on IA64 which is suspected to use much more stack than other
architectures.  On machines with pmap, we can use that; but the IA64 farm
members are running HPUX, so also include some bespoke code for HPUX.
(I've tested the latter on HPUX 10/HPPA; not entirely sure it will work
on HPUX 11/IA64, but we'll soon find out.)

Discussion: <CAM-w4HMwwcwaVvYcAH0_FGtG5GeXdYVRfvG81pXnSJWHnCfosQ@mail.gmail.com>

8 years agoTypo fix, buils -> builds
Stephen Frost [Fri, 8 Jul 2016 13:26:53 +0000 (09:26 -0400)]
Typo fix, buils -> builds

Pointed out by Alexander Law.

8 years agoFix missing parenthesis in docs
Magnus Hagander [Fri, 8 Jul 2016 07:06:45 +0000 (10:06 +0300)]
Fix missing parenthesis in docs

Author: Alexander Law

8 years agoFix typo in comment.
Robert Haas [Thu, 7 Jul 2016 20:13:37 +0000 (16:13 -0400)]
Fix typo in comment.

Amit Langote

8 years agoProperly adjust pointers when tuples are moved during CLUSTER.
Robert Haas [Thu, 7 Jul 2016 17:47:16 +0000 (13:47 -0400)]
Properly adjust pointers when tuples are moved during CLUSTER.

Otherwise, when we abandon incremental memory accounting and use
batch allocation for the final merge pass, we might crash.  This
has been broken since 0011c0091e886b874e485a46ff2c94222ffbf550.

Peter Geoghegan, tested by Noah Misch

8 years agoFix a prototype which is inconsistent with the function definition.
Robert Haas [Thu, 7 Jul 2016 17:46:51 +0000 (13:46 -0400)]
Fix a prototype which is inconsistent with the function definition.

Peter Geoghegan

8 years agoClarify resource utilization of parallel query.
Robert Haas [Thu, 7 Jul 2016 15:18:51 +0000 (11:18 -0400)]
Clarify resource utilization of parallel query.

temp_file_limit is a per-process limit, not a per-session limit across
all cooperating parallel processes; change wording accordingly, per a
suggestion from Tom Lane.

Also, document under max_parallel_workers_per_gather the fact that each
process involved in a parallel query may use as many resources as a
separate session.  Caveat emptor.

Per a complaint from Peter Geoghegan.

8 years agoReduce stack space consumption in tzload().
Tom Lane [Thu, 7 Jul 2016 15:28:17 +0000 (11:28 -0400)]
Reduce stack space consumption in tzload().

While syncing our timezone code with IANA's updates in commit 1c1a7cbd6,
I'd chosen not to adopt the code they conditionally compile under #ifdef
ALL_STATE.  The main thing that that drives is that the space for gmtime
and localtime timezone definitions isn't statically allocated, but is
malloc'd on first use.  I reasoned we didn't need that logic: we don't have
localtime() at all, and we always initialize TimeZone to GMT so we always
need that one.  But there is one other thing ALL_STATE does, which is to
make tzload() malloc its transient workspace instead of just declaring it
as a local variable.  It turns out that that local variable occupies 78K.
Even worse is that, at least for common US timezone settings, there's a
recursive call to parse the "posixrules" zone name, making peak stack
consumption to select a time zone upwards of 150K.  That's an uncomfortably
large fraction of our STACK_DEPTH_SLOP safety margin, and could result in
outright crashes if we try to reduce STACK_DEPTH_SLOP as has been discussed
recently.  Furthermore, this means that the postmaster's peak stack
consumption is several times that of a backend running typical queries
(since, except on Windows, backends inherit the timezone GUC values and
don't ever run this code themselves unless you do SET TIMEZONE).  That's
completely backwards from a safety perspective.

Hence, adopt the ALL_STATE rather than non-ALL_STATE variant of tzload(),
while not changing the other code aspects that symbol controls.  The
risk of an ENOMEM error from malloc() seems less than that of a SIGSEGV
from stack overrun.

This should probably get back-patched along with 1c1a7cbd6 and followon
fixes, whenever we decide we have enough confidence in the updates to do
that.

8 years agoRename pg_stat_wal_receiver.conn_info to conninfo.
Fujii Masao [Thu, 7 Jul 2016 03:59:39 +0000 (12:59 +0900)]
Rename pg_stat_wal_receiver.conn_info to conninfo.

Per discussion on pgsql-hackers, conninfo is better as the column name
because it's more commonly used in PostgreSQL.

Catalog version bumped due to the change of pg_proc.

Author: Michael Paquier

8 years agoFix typos
Peter Eisentraut [Thu, 7 Jul 2016 01:18:03 +0000 (21:18 -0400)]
Fix typos

8 years agodoc: Fix option order in man pages and fix typos
Peter Eisentraut [Thu, 7 Jul 2016 01:09:26 +0000 (21:09 -0400)]
doc: Fix option order in man pages and fix typos

8 years agoFix typo in comment.
Fujii Masao [Wed, 6 Jul 2016 09:59:17 +0000 (18:59 +0900)]
Fix typo in comment.

Author: Masahiko Sawada

8 years agoFix failure to handle conflicts in non-arbiter exclusion constraints.
Tom Lane [Mon, 4 Jul 2016 20:09:11 +0000 (16:09 -0400)]
Fix failure to handle conflicts in non-arbiter exclusion constraints.

ExecInsertIndexTuples treated an exclusion constraint as subject to
noDupErr processing even when it was not listed in arbiterIndexes, and
would therefore not error out for a conflict in such a constraint, instead
returning it as an arbiter-index failure.  That led to an infinite loop in
ExecInsert, since ExecCheckIndexConstraints ignored the index as-intended
and therefore didn't throw the expected error.  To fix, make the exclusion
constraint code path use the same condition as the index_insert call does
to decide whether no-error-for-duplicates behavior is appropriate.  While
at it, refactor a little bit to avoid unnecessary list_member_oid calls.
(That surely wouldn't save anything worth noticing, but I find the code
a bit clearer this way.)

Per bug report from Heikki Rauhala.  Back-patch to 9.5 where ON CONFLICT
was introduced.

Report: <4C976D6B-76B4-434C-8052-D009F7B7AEDA@reaktor.fi>

8 years agoTypo fix.
Tom Lane [Sun, 3 Jul 2016 22:43:43 +0000 (18:43 -0400)]
Typo fix.

8 years agoAllow RTE_SUBQUERY rels to be considered parallel-safe.
Tom Lane [Sun, 3 Jul 2016 22:24:49 +0000 (18:24 -0400)]
Allow RTE_SUBQUERY rels to be considered parallel-safe.

There isn't really any reason not to; the original comments here were
partly confused about subplans versus subquery-in-FROM, and partly
dependent on restrictions that no longer apply now that subqueries return
Paths not Plans.  Depending on what's inside the subquery, it might fail
to produce any parallel_safe Paths, but that's fine.

Tom Lane and Robert Haas

8 years agoFix up parallel-safety marking for appendrels.
Tom Lane [Sun, 3 Jul 2016 21:57:28 +0000 (17:57 -0400)]
Fix up parallel-safety marking for appendrels.

The previous coding assumed that the value derived by
set_rel_consider_parallel() for an appendrel parent would be accurate for
all the appendrel's children; but this is not so, for example because one
child might scan a temp table.  Instead, apply set_rel_consider_parallel()
to each child rel as well as the parent, and then take the AND of the
results as controlling parallel safety for the appendrel as a whole.

(We might someday be able to deal more intelligently than this with cases
in which some of the childrels are parallel-safe and others not, but that's
for later.)

Robert Haas and Tom Lane

8 years agoAllow treating TABLESAMPLE scans as parallel-safe.
Tom Lane [Sun, 3 Jul 2016 20:55:27 +0000 (16:55 -0400)]
Allow treating TABLESAMPLE scans as parallel-safe.

This was the intention all along, but an extraneous "return;" in
set_rel_consider_parallel() caused sampled rels to never be marked
consider_parallel.

Since we don't have any partial tablesample path/plan type yet, there's
no possibility of parallelizing the sample scan itself; but this fix
allows such a scan to appear below a parallel join, for example.

8 years agoSet correct cost data in Gather node added by force_parallel_mode.
Tom Lane [Sun, 3 Jul 2016 19:35:29 +0000 (15:35 -0400)]
Set correct cost data in Gather node added by force_parallel_mode.

We were just leaving the cost fields zeroes, which produces obviously bogus
output with force_parallel_mode = on.  With force_parallel_mode = regress,
the zeroes are hidden, but I wonder if they wouldn't still confuse add-on
code such as auto_explain.

8 years agoRound rowcount estimate for a partial path to an integer.
Tom Lane [Sun, 3 Jul 2016 18:53:37 +0000 (14:53 -0400)]
Round rowcount estimate for a partial path to an integer.

I'd been wondering why I was sometimes seeing fractional rowcount
estimates in parallel-query situations, and this seems to be the
reason.  (You won't see the fractional parts in EXPLAIN, because it
prints rowcounts with %.0f, but they are apparent in the debugger.)
A fractional rowcount is not any saner for a partial path than any
other kind of path, and it's equally likely to break cost estimation
for higher paths, so apply clamp_row_est() like we do in other places.

8 years agoPL/Python: Report argument parsing errors using exceptions
Peter Eisentraut [Sun, 3 Jul 2016 02:53:14 +0000 (22:53 -0400)]
PL/Python: Report argument parsing errors using exceptions

Instead of calling PLy_elog() for reporting Python argument parsing
errors, generate appropriate exceptions.  This matches the existing plpy
functions and is more consistent with the behavior of the Python
argument parsing routines.

8 years agoFix failure to mark all aggregates with appropriate transtype.
Tom Lane [Sat, 2 Jul 2016 17:23:02 +0000 (13:23 -0400)]
Fix failure to mark all aggregates with appropriate transtype.

In commit 915b703e1 I gave get_agg_clause_costs() the responsibility of
marking Aggref nodes with the appropriate aggtranstype.  I failed to notice
that where it was being called from, it might see only a subset of the
Aggref nodes that were in the original targetlist.  Specifically, if there
are duplicate aggregate calls in the tlist, either make_sort_input_target
or make_window_input_target might put just a single instance into the
grouping_target, and then only that instance would get marked.  Fix by
moving the call back into grouping_planner(), before we start building
assorted PathTargets from the query tlist.  Per report from Stefan Huehner.

Report: <20160702131056.GD3165@huehner.biz>

8 years agodoc: mention dependency on collation libraries
Bruce Momjian [Sat, 2 Jul 2016 15:22:36 +0000 (11:22 -0400)]
doc: mention dependency on collation libraries

Document that index storage is dependent on the operating system's
collation library ordering, and any change in that ordering can create
invalid indexes.

Discussion: 20160617154311.GB19359@momjian.us

Backpatch-through: 9.1

8 years agoFix some interrelated planner issues with initPlans and Param munging.
Tom Lane [Sat, 2 Jul 2016 00:05:55 +0000 (20:05 -0400)]
Fix some interrelated planner issues with initPlans and Param munging.

In commit 68fa28f77 I tried to teach SS_finalize_plan() to cope with
initPlans attached anywhere in the plan tree, by dint of moving its
handling of those into the recursion in finalize_plan().  It turns out that
that doesn't really work: if a lower-level plan node emits an initPlan
output parameter in its targetlist, it's legitimate for upper levels to
reference those Params --- and at the point where this code runs, those
references look just like the Param itself, so finalize_plan() quite
properly rejects them as being in the wrong place.  We could lobotomize
the checks enough to allow that, probably, but then it's not clear that
we'd have any meaningful check for misplaced Params at all.  What seems
better, at least in the near term, is to tweak standard_planner() a bit
so that initPlans are never placed anywhere but the topmost plan node
for a query level, restoring the behavior that occurred pre-9.6.  Possibly
we can do better if this code is ever merged into setrefs.c: then it would
be possible to check a Param's placement only when we'd failed to replace
it with a Var referencing a child plan node's targetlist.

BTW, I'm now suspicious that finalize_plan is doing the wrong thing by
returning the node's allParam rather than extParam to be incorporated
in the parent node's set of used parameters.  However, it makes no
difference given that initPlans only appear at top level, so I'll leave
that alone for now.

Another thing that emerged from this is that standard_planner() needs
to check for initPlans before deciding that it's safe to stick a Gather
node on top in force_parallel_mode mode.  We previously guarded against
that by deciding the plan wasn't wholePlanParallelSafe if any subplans
had been found, but after commit 5ce5e4a12 it's necessary to have this
substitute test, because path parallel_safe markings don't account for
initPlans.  (Normally, we'd have decided the paths weren't safe anyway
due to appearances of SubPlan nodes, Params, or CTE scans somewhere in
the tree --- but it's possible for those all to be optimized away while
initPlans still remain.)

Per fuzz testing by Andreas Seltenreich.

Report: <874m89rw7x.fsf@credativ.de>

8 years agoImprove WritebackContextInit() comment and prototype argument names.
Andres Freund [Fri, 1 Jul 2016 21:27:53 +0000 (14:27 -0700)]
Improve WritebackContextInit() comment and prototype argument names.

Author: Masahiko Sawada
Discussion: CAD21AoBD=Of1OzL90Xx4Q-3j=-2q7=S87cs75HfutE=eCday2w@mail.gmail.com

8 years agoProvide and use a makefile target to build all generated headers.
Tom Lane [Fri, 1 Jul 2016 19:08:55 +0000 (15:08 -0400)]
Provide and use a makefile target to build all generated headers.

As of 9.6, pg_regress doesn't build unless storage/lwlocknames.h has been
created; but there was nothing forcing that to happen if you just went into
src/test/regress/ and built there.  We previously had a similar complaint
about plpython.

To fix in a way that won't break next time we invent a generated header,
make src/backend/Makefile expose a phony target for updating all the
include files it builds, and invoke that before building pg_regress or
plpython.  In principle, maybe we ought to invoke that everywhere; but
it would add a lot of usually-useless make cycles, so let's just do it
in the places where people have complained.

I made a couple of cosmetic adjustments in src/backend/Makefile as well,
to deal with the generated headers in consistent orders.

Michael Paquier and Tom Lane

Report: <31398.1467036827@sss.pgh.pa.us>
Report: <20150916200959.GB32090@msg.df7cb.de>

8 years agowalreceiver: tweak pg_stat_wal_receiver behavior
Alvaro Herrera [Fri, 1 Jul 2016 17:53:46 +0000 (13:53 -0400)]
walreceiver: tweak pg_stat_wal_receiver behavior

There are two problems in the original coding: one is that if one
walreceiver process exits, the ready_to_display flag remains set in
shared memory, exposing the conninfo of the next walreceiver before
obfuscating.  Fix by having WalRcvDie reset the flag.

Second, the sleep-and-retry behavior that waited until walreceiver had
set ready_to_display wasn't liked; the preference is to have it return
no data instead, so let's do that.

Bugs in 9ed551e0a reported by Fujii Masao and Michël Paquier.

Author: Michaël Paquier

8 years agoRethink the GetForeignUpperPaths API (again).
Tom Lane [Fri, 1 Jul 2016 17:12:34 +0000 (13:12 -0400)]
Rethink the GetForeignUpperPaths API (again).

In the previous design, the GetForeignUpperPaths FDW callback hook was
called before we got around to labeling upper relations with the proper
consider_parallel flag; this meant that any upper paths created by an FDW
would be marked not-parallel-safe.  While that's probably just as well
right now, we aren't going to want it to be true forever.  Hence, abandon
the idea that FDWs should be allowed to inject upper paths before the core
code has gotten around to creating the relevant upper relation.  (Well,
actually they still can, but it's on their own heads how well it works.)
Instead, adopt the same API already designed for create_upper_paths_hook:
we call GetForeignUpperPaths after each upperrel has been created and
populated with the paths the core planner knows how to make.

8 years agoSet consider_parallel correctly for upper planner rels.
Robert Haas [Fri, 1 Jul 2016 15:43:19 +0000 (11:43 -0400)]
Set consider_parallel correctly for upper planner rels.

Commit 3fc6e2d7f5b652b417fa6937c34de2438d60fa9f introduced new "upper"
RelOptInfo structures but didn't set consider_parallel for them
correctly, a point I completely missed when reviewing it.  Later,
commit e06a38965b3bcdaa881e7e06892d4d8ab6c2c980 made the situation
worse by doing it incorrectly for the grouping relation.  Try to
straighten all of that out.  Along the way, get rid of the annoying
wholePlanParallelSafe flag, which was only necessarily because of
the fact that upper planning stages didn't use paths at the time
that code was written.

The most important immediate impact of these changes is that
force_parallel_mode will provide useful test coverage in quite a few
more scenarios than it did previously, but it's also necessary
preparation for fixing some problems related to subqueries.

Patch by me, reviewed by Tom Lane.

8 years agoBe more paranoid in ruleutils.c's get_variable().
Tom Lane [Fri, 1 Jul 2016 15:40:22 +0000 (11:40 -0400)]
Be more paranoid in ruleutils.c's get_variable().

We were merely Assert'ing that the Var matched the RTE it's supposedly
from.  But if the user passes incorrect information to pg_get_expr(),
the RTE might in fact not match; this led either to Assert failures
or core dumps, as reported by Chris Hanks in bug #14220.  To fix, just
convert the Asserts to test-and-elog.  Adjust an existing test-and-elog
elsewhere in the same function to be consistent in wording.

(If we really felt these were user-facing errors, we might promote them to
ereport's; but I can't convince myself that they're worth translating.)

Back-patch to 9.3; the problematic code doesn't exist before that, and
a quick check says that 9.2 doesn't crash on such cases.

Michael Paquier and Thomas Munro

Report: <20160629224349.1407.32667@wrigleys.postgresql.org>

8 years agopostgres_fdw: Fix cache lookup failure while creating error context.
Robert Haas [Fri, 1 Jul 2016 15:29:25 +0000 (11:29 -0400)]
postgres_fdw: Fix cache lookup failure while creating error context.

This is fallout from join pushdown; get_relid_attribute_name can't
handle an attribute number of 0, indicating a whole-row reference,
and shouldn't be called in that case.

Etsuro Fujita, reviewed by Ashutosh Bapat

8 years agopostgres_fdw: Remove schema-qualification from cast to text.
Robert Haas [Fri, 1 Jul 2016 14:13:06 +0000 (10:13 -0400)]
postgres_fdw: Remove schema-qualification from cast to text.

As pointed out by Ashutosh Bapat, the header comments for this file
say that schema-qualification is needed for all and only those types
outside pg_catalog.  pg_catalog.text is not outside pg_catalog.

8 years agoFix crash bug in RestoreSnapshot.
Robert Haas [Fri, 1 Jul 2016 12:51:58 +0000 (08:51 -0400)]
Fix crash bug in RestoreSnapshot.

If serialized_snapshot->subxcnt > 0 and serialized_snapshot->xcnt == 0,
the old coding would do the wrong thing and crash.  This can happen
on standby servers.

Report by Andreas Seltenreich.  Patch by Thomas Munro, reviewed by
Amit Kapila and tested by Andreas Seltenreich.

8 years agoFix several mistakes around parallel workers and client_encoding.
Robert Haas [Thu, 30 Jun 2016 22:35:32 +0000 (18:35 -0400)]
Fix several mistakes around parallel workers and client_encoding.

Previously, workers sent data to the leader using the client encoding.
That mostly worked, but the leader the converted the data back to the
server encoding.  Since not all encoding conversions are reversible,
that could provoke failures.  Fix by using the database encoding for
all communication between worker and leader.

Also, while temporary changes to GUC settings, as from the SET clause
of a function, are in general OK for parallel query, changing
client_encoding this way inside of a parallel worker is not OK.
Previously, that would have confused the leader; with these changes,
it would not confuse the leader, but it wouldn't do anything either.
So refuse such changes in parallel workers.

Also, the previous code naively assumed that when it received a
NotifyResonse from the worker, it could pass that directly back to the
user.  But now that worker-to-leader communication always uses the
database encoding, that's clearly no longer correct - though,
actually, the old way was always broken for V2 clients.  So
disassemble and reconstitute the message instead.

Issues reported by Peter Eisentraut.  Patch by me, reviewed by
Peter Eisentraut.