]> granicus.if.org Git - postgresql/log
postgresql
8 years agoUpdate pgcrypto extension for parallel query.
Robert Haas [Thu, 9 Jun 2016 21:18:14 +0000 (17:18 -0400)]
Update pgcrypto extension for parallel query.

All functions provided by this extension are PARALLEL SAFE.

Andreas Karlsson

8 years agoUpdate pg_buffercache extension for parallel query.
Robert Haas [Thu, 9 Jun 2016 21:18:12 +0000 (17:18 -0400)]
Update pg_buffercache extension for parallel query.

The pg_buffercache_pages function provided by this extension is
PARALLEL SAFE.

Andreas Karlsson

8 years agoUpdate pageinspect extension for parallel query.
Robert Haas [Thu, 9 Jun 2016 21:18:09 +0000 (17:18 -0400)]
Update pageinspect extension for parallel query.

All functions provided by this extension are PARALLEL SAFE.

Andreas Karlsson

8 years agoHandle contrib's GIN/GIST support function signature changes honestly.
Tom Lane [Thu, 9 Jun 2016 20:44:25 +0000 (16:44 -0400)]
Handle contrib's GIN/GIST support function signature changes honestly.

In commits 9ff60273e35cad6e and dbe2328959e12701 I (tgl) fixed the
signatures of a bunch of contrib's GIN and GIST support functions so that
they would pass validation by the recently-added amvalidate functions.
The backend does not actually consult or check those signatures otherwise,
so I figured this was basically cosmetic and did not require an extension
version bump.  However, Alexander Korotkov pointed out that that would
leave us in a pretty messy situation if we ever wanted to redefine those
functions later, because there wouldn't be a unique way to name them.
Since we're going to be bumping these extensions' versions anyway for
parallel-query cleanups, let's take care of this now.

Andreas Karlsson, adjusted for more search-path-safety by me

8 years agoDon't generate parallel paths for rels with parallel-restricted outputs.
Robert Haas [Thu, 9 Jun 2016 16:40:23 +0000 (12:40 -0400)]
Don't generate parallel paths for rels with parallel-restricted outputs.

Such paths are unsafe.  To make it cheaper to detect when this case
applies, track whether a relation's default PathTarget contains any
non-Vars.  In most cases, the answer will be no, which enables us to
determine cheaply that the target list for a proposed path is
parallel-safe.  However, subquery pull-up can create cases that
require us to inspect the target list more carefully.

Amit Kapila, reviewed by me.

8 years agoYet again update typedefs.list file in preparation for pgindent run
Robert Haas [Thu, 9 Jun 2016 16:15:33 +0000 (12:15 -0400)]
Yet again update typedefs.list file in preparation for pgindent run

Because the run was delayed, the file had a chance to get out of date.

8 years agoClarify documentation of ceil/ceiling/floor functions.
Tom Lane [Thu, 9 Jun 2016 15:58:00 +0000 (11:58 -0400)]
Clarify documentation of ceil/ceiling/floor functions.

Document these as "nearest integer >= argument" and "nearest integer <=
argument", which will hopefully be less confusing than the old formulation.
New wording is from Matlab via Dean Rasheed.

I changed the pg_description entries as well as the SGML docs.  In the
back branches, this will only affect installations initdb'd in the future,
but it should be harmless otherwise.

Discussion: <CAEZATCW3yzJo-NMSiQs5jXNFbTsCEftZS-Og8=FvFdiU+kYuSA@mail.gmail.com>

8 years agoMop-up for parallel degree-ectomy.
Tom Lane [Thu, 9 Jun 2016 15:16:26 +0000 (11:16 -0400)]
Mop-up for parallel degree-ectomy.

Fix a couple of overlooked uses of "degree" terminology.  Make the parallel
worker count selection logic in create_plain_partial_paths more robust (in
particular, it failed with max_parallel_workers_per_gather set to zero).

8 years agoEliminate "parallel degree" terminology.
Robert Haas [Thu, 9 Jun 2016 13:08:27 +0000 (09:08 -0400)]
Eliminate "parallel degree" terminology.

This terminology provoked widespread complaints.  So, instead, rename
the GUC max_parallel_degree to max_parallel_workers_per_gather
(leaving room for a possible future GUC max_parallel_workers that acts
as a system-wide limit), and rename the parallel_degree reloption to
parallel_workers.  Rename structure members to match.

These changes create a dump/restore hazard for users of PostgreSQL
9.6beta1 who have set the reloption (or applied the GUC using ALTER
USER or ALTER DATABASE).

8 years agoPolish the documentation concerning phrase text search.
Tom Lane [Thu, 9 Jun 2016 04:30:59 +0000 (00:30 -0400)]
Polish the documentation concerning phrase text search.

Fix grammar, improve examples, etc.

I did not attempt to document the current behavior concerning distance-zero
matches, because I think that's broken and needs to change, so I'm not
going to use up brain cells figuring out how to explain how it works now.
One way or the other, there's still more to write here.

8 years agoFix typo.
Robert Haas [Wed, 8 Jun 2016 12:37:06 +0000 (08:37 -0400)]
Fix typo.

Amit Langote

8 years agoTest parallel query essentials in "make check".
Noah Misch [Wed, 8 Jun 2016 03:36:22 +0000 (23:36 -0400)]
Test parallel query essentials in "make check".

Clément Prévost and Peter Eisentraut

8 years agoMake psql_crosstab plans more stable
Alvaro Herrera [Tue, 7 Jun 2016 23:18:31 +0000 (19:18 -0400)]
Make psql_crosstab plans more stable

To achieve this, ANALYZE the data table before querying it, as suggested
by Tom Lane.  On my system, this enables the test to pass with 128 kB of
work_mem (a value with which other tests fail -- so it seems good
enough).

Reported by Michaël Paquier.

8 years agonls-global.mk: search build dir for source files, too
Alvaro Herrera [Tue, 7 Jun 2016 22:55:18 +0000 (18:55 -0400)]
nls-global.mk: search build dir for source files, too

In VPATH builds, the build directory was not being searched for files in
GETTEXT_FILES, leading to failure to construct the .pot files.  This has
bit me all along, but never hard enough to get it fixed; I suppose not a
lot of people uses VPATH and NLS-enabled builds, and those that do,
don't do "make update-po" often.

This is a longstanding problem, so backpatch all the way back.

8 years agoFix thinko in description of table_name parameter
Alvaro Herrera [Tue, 7 Jun 2016 22:18:26 +0000 (18:18 -0400)]
Fix thinko in description of table_name parameter

Commit 6820094d1 mixed up types of parent object (table) with type of
sub-object being commented on.  Noticed while fixing docs for
COMMENT ON ACCESS METHOD.

Backpatch to 9.5, like that commit.

8 years agoAdd missing translate_columns array entry
Alvaro Herrera [Tue, 7 Jun 2016 22:03:31 +0000 (18:03 -0400)]
Add missing translate_columns array entry

This omission caused an assertion error in \dA+.

8 years agoFix loose ends for SQL ACCESS METHOD objects
Alvaro Herrera [Tue, 7 Jun 2016 21:59:34 +0000 (17:59 -0400)]
Fix loose ends for SQL ACCESS METHOD objects

COMMENT ON ACCESS METHOD was missing; add it, along psql tab-completion
support for it.

psql was also missing a way to list existing access methods; the new \dA
command does that.

Also add tab-completion support for DROP ACCESS METHOD.

Author: Michael Paquier
Discussion: https://www.postgresql.org/message-id/CAB7nPqTzdZdu8J7EF8SXr_R2U5bSUUYNOT3oAWBZdEoggnwhGA@mail.gmail.com

8 years agoRevert "Use Foreign Key relationships to infer multi-column join selectivity".
Tom Lane [Tue, 7 Jun 2016 21:21:17 +0000 (17:21 -0400)]
Revert "Use Foreign Key relationships to infer multi-column join selectivity".

This commit reverts 137805f89 as well as the associated commits 015e88942,
5306df283, and 68d704edb.  We found multiple bugs in this feature, and
there was concern about possible planner slowdown (though to be fair,
exhibiting a very large slowdown proved difficult).  The way forward
requires a considerable rewrite, which may or may not be possible to
accomplish in time for beta2.  In my judgment reviewing the rewrite will
be easier to accomplish starting from a clean slate, so let's temporarily
revert what's there now.  This also leaves us in a safe state if it turns
out to be necessary to postpone the rewrite to the next development cycle.

Discussion: <20160429102531.GA13701@huehner.biz>

8 years agoMessage style and wording fixes
Peter Eisentraut [Tue, 7 Jun 2016 18:18:08 +0000 (14:18 -0400)]
Message style and wording fixes

8 years agodoc: Update wording about direct system catalog manipulation
Peter Eisentraut [Tue, 7 Jun 2016 18:15:42 +0000 (14:15 -0400)]
doc: Update wording about direct system catalog manipulation

It was previously suggested that "esoteric" operations such as creating
a new access method would require direct manipulation of the system
catalogs, but that example has gone away, and I can't think of a new one
to replace it, so just put in some weasel wording.

8 years agodoc: Fix typo
Peter Eisentraut [Tue, 7 Jun 2016 18:15:21 +0000 (14:15 -0400)]
doc: Fix typo

8 years agoCorrect phrasing in dsm.c comments
Simon Riggs [Tue, 7 Jun 2016 16:34:33 +0000 (17:34 +0100)]
Correct phrasing in dsm.c comments

8 years agoImprove documentation for contrib/bloom.
Tom Lane [Tue, 7 Jun 2016 16:19:18 +0000 (12:19 -0400)]
Improve documentation for contrib/bloom.

Michael Paquier, David Johnston, Tom Lane

Discussion: <CAB7nPqQB8dcFmY1uodmiJOSZdhBFOx-us-uW6rfYrzhpEiBR2g@mail.gmail.com>

8 years agoUpdate lo extension for parallel query.
Robert Haas [Tue, 7 Jun 2016 15:26:01 +0000 (11:26 -0400)]
Update lo extension for parallel query.

The lo_oid function provided by this extension is PARALLEL SAFE.

Andreas Karlsson

8 years agoUpdate isn extension for parallel query.
Robert Haas [Tue, 7 Jun 2016 15:25:58 +0000 (11:25 -0400)]
Update isn extension for parallel query.

All functions provided by this extension are PARALLEL SAFE.

Andreas Karlsson

8 years agoUpdate intagg extension for parallel query.
Robert Haas [Tue, 7 Jun 2016 15:25:55 +0000 (11:25 -0400)]
Update intagg extension for parallel query.

All functions provided by this extension are PARALLEL SAFE.

Andreas Karlsson

8 years agoUpdate fuzzystrmatch extension for parallel query.
Robert Haas [Tue, 7 Jun 2016 15:25:53 +0000 (11:25 -0400)]
Update fuzzystrmatch extension for parallel query.

All functions provided by this extension are PARALLEL SAFE.

Andreas Karlsson

8 years agoUpdate earthdistance extension for parallel query.
Robert Haas [Tue, 7 Jun 2016 15:25:49 +0000 (11:25 -0400)]
Update earthdistance extension for parallel query.

All functions provided by this extension are PARALLEL SAFE.

Andreas Karlsson

8 years agoUpdate citext extension for parallel query.
Robert Haas [Tue, 7 Jun 2016 15:25:38 +0000 (11:25 -0400)]
Update citext extension for parallel query.

All citext functions are PARALLEL SAFE, and a couple of them can
benefit from having aggregate combine functions.

Andreas Karlsson

8 years agoMinor typos / copy-editing for snapmgr.c
Stephen Frost [Tue, 7 Jun 2016 15:14:48 +0000 (11:14 -0400)]
Minor typos / copy-editing for snapmgr.c

Noticed while reviewing snapshot management.

8 years agopsql: Add missing file to nls.mk
Peter Eisentraut [Tue, 7 Jun 2016 14:58:46 +0000 (10:58 -0400)]
psql: Add missing file to nls.mk

crosstabview.c was not added to nls.mk when it was added.  Also remove
redundant gettext markers, since psql_error() is already registered as a
gettext keyword.

8 years agodoc: Refer to table by id
Peter Eisentraut [Tue, 7 Jun 2016 14:38:48 +0000 (10:38 -0400)]
doc: Refer to table by id

8 years agopgbench: Fix order in --help output
Peter Eisentraut [Tue, 7 Jun 2016 14:09:24 +0000 (10:09 -0400)]
pgbench: Fix order in --help output

The new option --progress-timestamp was just added at the end.  Put it
in alphabetical order.

8 years agoFix simple typo in monitoring docs
Simon Riggs [Tue, 7 Jun 2016 14:21:01 +0000 (15:21 +0100)]
Fix simple typo in monitoring docs

8 years agopg_dump only selected components of ACCESS METHODs
Stephen Frost [Tue, 7 Jun 2016 13:56:02 +0000 (09:56 -0400)]
pg_dump only selected components of ACCESS METHODs

dumpAccessMethod() didn't get the memo that we now have a bitfield for
the components which should be dumped instead of a simple boolean.

Correct that by checking if the relevant bit is set for each component
being dumped out (and not dumping it out if it isn't set).

This corrects an issue where CREATE ACCESS METHOD commands were being
included in non-binary-upgrades when an extension included an access
method (as the bloom extensions does).

Also add a regression test to make sure that we only dump out the
ACCESS METHOD commands, when they are part of an extension, when doing
a binary upgrade.

Pointed out by Thom Brown.

8 years agoPL/Python: Move ereport wrapper test cases to separate file
Peter Eisentraut [Tue, 7 Jun 2016 13:33:41 +0000 (09:33 -0400)]
PL/Python: Move ereport wrapper test cases to separate file

In commit 5c3c3cd0a3046339597a03bc708cb5530dc07059, the new tests were
apparently just dumped into the first convenient file.  Move them to a
separate file dedicated to testing that functionality and leave the
plpython_test test to test basic functionality, as it did before.

8 years agoDon't reset changes_since_analyze after a selective-columns ANALYZE.
Tom Lane [Mon, 6 Jun 2016 21:44:17 +0000 (17:44 -0400)]
Don't reset changes_since_analyze after a selective-columns ANALYZE.

If we ANALYZE only selected columns of a table, we should not postpone
auto-analyze because of that; other columns may well still need stats
updates.  As committed, the counter is left alone if a column list is
given, whether or not it includes all analyzable columns of the table.
Per complaint from Tomasz Ostrowski.

It's been like this a long time, so back-patch to all supported branches.

Report: <ef99c1bd-ff60-5f32-2733-c7b504eb960c@ato.waw.pl>

8 years agoStop the executor if no more tuples can be sent from worker to leader.
Robert Haas [Mon, 6 Jun 2016 18:52:58 +0000 (14:52 -0400)]
Stop the executor if no more tuples can be sent from worker to leader.

If a Gather node has read as many tuples as it needs (for example, due
to Limit) it may detach the queue connecting it to the worker before
reading all of the worker's tuples.  Rather than let the worker
continue to generate and send all of the results, have it stop after
sending the next tuple.

More could be done here to stop the worker even quicker, but this is
about as well as we can hope to do for 9.6.

This is in response to a problem report from Andreas Seltenreich.
Commit 44339b892a04e94bbb472235882dc6f7023bdc65 should be actually be
sufficient to fix that example even without this change, but it seems
better to do this, too, since we might otherwise waste quite a large
amount of effort in one or more workers.

Discussion: CAA4eK1KOKGqmz9bGu+Z42qhRwMbm4R5rfnqsLCNqFs9j14jzEA@mail.gmail.com

Amit Kapila

8 years agoshm_mq: After a send fails with SHM_MQ_DETACHED, later ones should too.
Robert Haas [Mon, 6 Jun 2016 18:35:30 +0000 (14:35 -0400)]
shm_mq: After a send fails with SHM_MQ_DETACHED, later ones should too.

Prior to this patch, it was occasionally possible, after shm_mq_sendv
had previously returned SHM_MQ_DETACHED, for a later shm_mq_sendv
operation to fail an assertion instead of just again returning
SHM_MQ_ATTACHED.  From the shm_mq code's point of view, it was
expecting to be called again with the same arguments, since the
previous operation had only partially completed.  However, a caller
who isn't using non-blocking mode won't be prepared to repeat the call
with the same arguments, and this code shouldn't expect that they
will.  Repair in such a way that we'll be OK whether the next call
uses the same arguments or not.

Found by Andreas Seltenreich.  Analysis and sketch of fix by Amit
Kapila.  Patch by me, reviewed by Amit Kapila.

8 years agopg_upgrade: Don't overwrite existing files.
Robert Haas [Mon, 6 Jun 2016 13:51:56 +0000 (09:51 -0400)]
pg_upgrade: Don't overwrite existing files.

For historical reasons, copyFile and rewriteVisibilityMap took a force
argument which was always passed as true, meaning that any existing
file should be overwritten.  However, it seems much safer to instead
fail if a file we need to write already exists.

While we're at it, remove the "force" argument altogether, since it was
never passed as anything other than true (and now we would never pass
it as anything other than false, if we kept it).

Noted by Andres Freund during post-commit review of the patch that added
rewriteVisibilityMap, commit 7087166a88fe0c04fc6636d0d6d6bea1737fc1fb,
but this also changes the behavior when copying files without rewriting
them.

Patch by Masahiko Sawada.

8 years agoFix typo.
Robert Haas [Mon, 6 Jun 2016 11:58:50 +0000 (07:58 -0400)]
Fix typo.

Jim Nasby

8 years agopg_upgrade: Improve error checking in rewriteVisibilityMap.
Robert Haas [Mon, 6 Jun 2016 10:14:21 +0000 (06:14 -0400)]
pg_upgrade: Improve error checking in rewriteVisibilityMap.

In the old logic, if read() were to return an error, we'd silently stop
rewriting the visibility map at that point in the file.  That's safe,
but reporting the error is better, so do that instead.

Report by Andres Freund.  Patch by Masahiko Sawada, with one correction
by me.

8 years agoFix whitespace
Peter Eisentraut [Sun, 5 Jun 2016 21:02:56 +0000 (17:02 -0400)]
Fix whitespace

8 years agoProperly initialize SortSupport for ORDER BY rechecks in nodeIndexscan.c.
Tom Lane [Sun, 5 Jun 2016 15:53:06 +0000 (11:53 -0400)]
Properly initialize SortSupport for ORDER BY rechecks in nodeIndexscan.c.

Fix still another bug in commit 35fcb1b3d: it failed to fully initialize
the SortSupport states it introduced to allow the executor to re-check
ORDER BY expressions containing distance operators.  That led to a null
pointer dereference if the sortsupport code tried to use ssup_cxt.  The
problem only manifests in narrow cases, explaining the lack of previous
field reports.  It requires a GiST-indexable distance operator that lacks
SortSupport and is on a pass-by-ref data type, which among core+contrib
seems to be only btree_gist's interval opclass; and it requires the scan
to be done as an IndexScan not an IndexOnlyScan, which explains how
btree_gist's regression test didn't catch it.  Per bug #14134 from
Jihyun Yu.

Peter Geoghegan

Report: <20160511154904.2603.43889@wrigleys.postgresql.org>

8 years agoUpdate contrib/tsearch2/expected/tsearch2_1.out for phrase FTS.
Tom Lane [Sat, 4 Jun 2016 04:49:42 +0000 (00:49 -0400)]
Update contrib/tsearch2/expected/tsearch2_1.out for phrase FTS.

Commits bb140506d and 38627f687 didn't bother with this.
Per buildfarm member magpie.

8 years agoFix grammar's AND/OR flattening to work with operator_precedence_warning.
Tom Lane [Fri, 3 Jun 2016 23:12:29 +0000 (19:12 -0400)]
Fix grammar's AND/OR flattening to work with operator_precedence_warning.

It'd be good for "(x AND y) AND z" to produce a three-child AND node
whether or not operator_precedence_warning is on, but that failed to
happen when it's on because makeAndExpr() didn't look through the added
AEXPR_PAREN node.  This has no effect on generated plans because prepqual.c
would flatten the AND nest anyway; but it does affect the number of parens
printed in ruleutils.c, for example.  I'd already fixed some similar
hazards in parse_expr.c in commit abb164655, but didn't think to search
gram.y for problems of this ilk.  Per gripe from Jean-Pierre Pelletier.

Report: <fa0535ec6d6428cfec40c7e8a6d11156@mail.gmail.com>

8 years agoInline the easy cases in MakeExpandedObjectReadOnly().
Tom Lane [Fri, 3 Jun 2016 22:34:05 +0000 (18:34 -0400)]
Inline the easy cases in MakeExpandedObjectReadOnly().

This attempts to buy back some of whatever performance we lost from fixing
bug #14174 by inlining the initial checks in MakeExpandedObjectReadOnly()
into the callers.  We can do that in a macro without creating multiple-
evaluation hazards, so it's pretty much free notationally; and the amount
of code added to callers should be minimal as well.  (Testing a value can't
take many more instructions than passing it to a subroutine.)

Might as well inline DatumIsReadWriteExpandedObject() while we're at it.

This is an ABI break for callers, so it doesn't seem safe to put into 9.5,
but I see no reason not to do it in HEAD.

8 years agoMark read/write expanded values as read-only in ValuesNext(), too.
Tom Lane [Fri, 3 Jun 2016 22:07:14 +0000 (18:07 -0400)]
Mark read/write expanded values as read-only in ValuesNext(), too.

Further thought about bug #14174 motivated me to try the case of a
R/W datum being returned from a VALUES list, and sure enough it was
broken.  Fix that.

Also add a regression test case exercising the same scenario for
FunctionScan.  That's not broken right now, because the function's
result will get shoved into a tuplestore between generation and use;
but it could easily become broken whenever we get around to optimizing
FunctionScan better.

There don't seem to be any other places where we put the result of
expression evaluation into a virtual tuple slot that could then be
the source for Vars of further expression evaluation, so I think
this is the end of this bug.

8 years agoMark read/write expanded values as read-only in ExecProject().
Tom Lane [Fri, 3 Jun 2016 19:14:35 +0000 (15:14 -0400)]
Mark read/write expanded values as read-only in ExecProject().

If a plan node output expression returns an "expanded" datum, and that
output column is referenced in more than one place in upper-level plan
nodes, we need to ensure that what is returned is a read-only reference
not a read/write reference.  Otherwise one of the referencing sites could
scribble on or even delete the expanded datum before we have evaluated the
others.  Commit 1dc5ebc9077ab742, which introduced this feature, supposed
that it'd be sufficient to make SubqueryScan nodes force their output
columns to read-only state.  The folly of that was revealed by bug #14174
from Andrew Gierth, and really should have been immediately obvious
considering that the planner will happily optimize SubqueryScan nodes
out of the plan without any regard for this issue.

The safest fix seems to be to make ExecProject() force its results into
read-only state; that will cover every case where a plan node returns
expression results.  Actually we can delegate this to ExecTargetList()
since we can recursively assume that plain Vars will not reference
read-write datums.  That should keep the extra overhead down to something
minimal.  We no longer need ExecMakeSlotContentsReadOnly(), which was
introduced only in support of the idea that just a few plan node types
would need to do this.

In the future it would be nice to have the planner account for this problem
and inject force-to-read-only expression evaluation nodes into only the
places where there's a risk of multiple evaluation.  That's not a suitable
solution for 9.5 or even 9.6 at this point, though.

Report: <20160603124628.9932.41279@wrigleys.postgresql.org>

8 years agoRemove bogus code to apply PathTargets to partial paths.
Robert Haas [Fri, 3 Jun 2016 18:27:33 +0000 (14:27 -0400)]
Remove bogus code to apply PathTargets to partial paths.

The partial paths that get modified may already have been used as
part of a GatherPath which appears in the path list, so modifying
them is not a good idea at this stage - especially because this
code has no check that the PathTarget is in fact parallel-safe.

When partial aggregation is being performed, this is actually
harmless because we'll end up replacing the pathtargets here with
the correct ones within create_grouping_paths().  But if we've got
a query tree containing only scan/join operations then this can
result in incorrectly pushing down parallel-restricted target
list entries.  If those are, for example, references to subqueries,
that can crash the server; but it's wrong in any event.

Amit Kapila

8 years agoMark PostmasterPid as PGDLLIMPORT.
Robert Haas [Fri, 3 Jun 2016 17:50:51 +0000 (13:50 -0400)]
Mark PostmasterPid as PGDLLIMPORT.

This is so that extensions can use it.

Michael Paquier

8 years agoAdd new snapshot fields to serialize/deserialize functions.
Kevin Grittner [Fri, 3 Jun 2016 16:13:28 +0000 (11:13 -0500)]
Add new snapshot fields to serialize/deserialize functions.

The "snapshot too old" condition was not being recognized when
using a copied snapshot, since the original timestamp and lsn were
not being passed along.  Noticed when testing the combination of
"snapshot too old" with parallel query execution.

8 years agoFix comment to be more accurate.
Robert Haas [Fri, 3 Jun 2016 15:51:50 +0000 (11:51 -0400)]
Fix comment to be more accurate.

Now that we skip vacuuming all-frozen pages, this comment needs
updating.

Masahiko Sawada

8 years agoSuppress -Wunused-result warnings about write(), again.
Tom Lane [Fri, 3 Jun 2016 15:29:20 +0000 (11:29 -0400)]
Suppress -Wunused-result warnings about write(), again.

Adopt the same solution as in commit aa90e148ca70a235, but this time
let's put the ugliness inside the write_stderr() macro, instead of
expecting each call site to deal with it.  Back-port that decision
into psql/common.c where I got the macro from in the first place.

Per gripe from Peter Eisentraut.

8 years agoFix various common mispellings.
Greg Stark [Fri, 3 Jun 2016 14:13:36 +0000 (15:13 +0100)]
Fix various common mispellings.

Mostly these are just comments but there are a few in documentation
and a handful in code and tests. Hopefully this doesn't cause too much
unnecessary pain for backpatching. I relented from some of the most
common like "thru" for that reason. The rest don't seem numerous
enough to cause problems.

Thanks to Kevin Lyda's tool https://pypi.python.org/pypi/misspellings

8 years agoMeasure Bloom index signature-length reloption in bits, not words.
Tom Lane [Fri, 3 Jun 2016 14:52:36 +0000 (10:52 -0400)]
Measure Bloom index signature-length reloption in bits, not words.

Per discussion, this is a more understandable and future-proof way of
exposing the setting to users.  On-disk, we can still store it in words,
so as to not break on-disk compatibility with beta1.

Along the way, clean up the code associated with Bloom reloptions.
Provide explicit macros for default and maximum lengths rather than
having magic numbers buried in multiple places in the code.  Drop
the adjustBloomOptions() code altogether: it was useless in view of
the fact that reloptions.c already performed default-substitution and
range checking for the options.  Rename a couple of macros and types
for more clarity.

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

8 years agoCosmetic improvements to freeze map code.
Robert Haas [Fri, 3 Jun 2016 12:43:41 +0000 (08:43 -0400)]
Cosmetic improvements to freeze map code.

Per post-commit review comments from Andres Freund, improve variable
names, comments, and in one place, slightly improve the code structure.

Masahiko Sawada

8 years agoBe conservative about alignment requirements of struct epoll_event.
Greg Stark [Thu, 2 Jun 2016 18:23:25 +0000 (19:23 +0100)]
Be conservative about alignment requirements of struct epoll_event.

Use MAXALIGN size/alignment to guarantee that later uses of memory are
aligned correctly. E.g. epoll_event might need 8 byte alignment on some
platforms, but earlier allocations like WaitEventSet and WaitEvent might
not sized to guarantee that when purely using sizeof().

Found by myself while testing on an Sun Ultra 5 (Sparc IIi) with some
editorializing by Andres Freund.

In passing fix a couple typos in the area

8 years agoC comment improvement & typo fix.
Kevin Grittner [Thu, 2 Jun 2016 17:52:41 +0000 (12:52 -0500)]
C comment improvement & typo fix.

Thomas Munro

8 years agoRedesign handling of SIGTERM/control-C in parallel pg_dump/pg_restore.
Tom Lane [Thu, 2 Jun 2016 17:27:53 +0000 (13:27 -0400)]
Redesign handling of SIGTERM/control-C in parallel pg_dump/pg_restore.

Formerly, Unix builds of pg_dump/pg_restore would trap SIGINT and similar
signals and set a flag that was tested in various data-transfer loops.
This was prone to errors of omission (cf commit 3c8aa6654); and even if
the client-side response was prompt, we did nothing that would cause
long-running SQL commands (e.g. CREATE INDEX) to terminate early.
Also, the master process would effectively do nothing at all upon receipt
of SIGINT; the only reason it seemed to work was that in typical scenarios
the signal would also be delivered to the child processes.  We should
support termination when a signal is delivered only to the master process,
though.

Windows builds had no console interrupt handler, so they would just fall
over immediately at control-C, again leaving long-running SQL commands to
finish unmolested.

To fix, remove the flag-checking approach altogether.  Instead, allow the
Unix signal handler to send a cancel request directly and then exit(1).
In the master process, also have it forward the signal to the children.
On Windows, add a console interrupt handler that behaves approximately
the same.  The main difference is that a single execution of the Windows
handler can send all the cancel requests since all the info is available
in one process, whereas on Unix each process sends a cancel only for its
own database connection.

In passing, fix an old problem that DisconnectDatabase tends to send a
cancel request before exiting a parallel worker, even if nothing went
wrong.  This is at least a waste of cycles, and could lead to unexpected
log messages, or maybe even data loss if it happened in pg_restore (though
in the current code the problem seems to affect only pg_dump).  The cause
was that after a COPY step, pg_dump was leaving libpq in PGASYNC_BUSY
state, causing PQtransactionStatus() to report PQTRANS_ACTIVE.  That's
normally harmless because the next PQexec() will silently clear the
PGASYNC_BUSY state; but in a parallel worker we might exit without any
additional SQL commands after a COPY step.  So add an extra PQgetResult()
call after a COPY to allow libpq to return to PGASYNC_IDLE state.

This is a bug fix, IMO, so back-patch to 9.3 where parallel dump/restore
were introduced.

Thanks to Kyotaro Horiguchi for Windows testing and code suggestions.

Original-Patch: <7005.1464657274@sss.pgh.pa.us>
Discussion: <20160602.174941.256342236.horiguchi.kyotaro@lab.ntt.co.jp>

8 years agoFix btree mark/restore bug.
Kevin Grittner [Thu, 2 Jun 2016 17:23:01 +0000 (12:23 -0500)]
Fix btree mark/restore bug.

Commit 2ed5b87f96d473962ec5230fd820abfeaccb2069 introduced a bug in
mark/restore, in an attempt to optimize repeated restores to the
same page.  This caused an assertion failure during a merge join
which fed directly from an index scan, although the impact would
not be limited to that case.  Revert the bad chunk of code from
that commit.

While investigating this bug it was discovered that a particular
"paranoia" set of the mark position field would not prevent bad
behavior; it would just make it harder to diagnose.  Change that
into an assertion, which will draw attention to any future problem
in that area more directly.

Backpatch to 9.5, where the bug was introduced.

Bug #14169 reported by Shinta Koyanagi.
Preliminary analysis by Tom Lane identified which commit caused
the bug.

8 years agoClean up some minor inefficiencies in parallel dump/restore.
Tom Lane [Wed, 1 Jun 2016 20:14:21 +0000 (16:14 -0400)]
Clean up some minor inefficiencies in parallel dump/restore.

Parallel dump did a totally pointless query to find out the name of each
table to be dumped, which it already knows.  Parallel restore runs issued
lots of redundant SET commands because _doSetFixedOutputState() was invoked
once per TOC item rather than just once at connection start.  While the
extra queries are insignificant if you're dumping or restoring large
tables, it still seems worth getting rid of them.

Also, give the responsibility for selecting the right client_encoding for
a parallel dump worker to setup_connection() where it naturally belongs,
instead of having ad-hoc code for that in CloneArchive().  And fix some
minor bugs like use of strdup() where pg_strdup() would be safer.

Back-patch to 9.3, mostly to keep the branches in sync in an area that
we're still finding bugs in.

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

8 years agodoc: Update version() and current_date output in tutorial
Peter Eisentraut [Tue, 31 May 2016 20:45:02 +0000 (16:45 -0400)]
doc: Update version() and current_date output in tutorial

While the version number is automatically updated in the example output,
the other details looked a bit dated.

suggested by mike2.schneider@gmail.com

8 years agoAvoid useless closely-spaced writes of statistics files.
Tom Lane [Tue, 31 May 2016 19:54:46 +0000 (15:54 -0400)]
Avoid useless closely-spaced writes of statistics files.

The original intent in the stats collector was that we should not write out
stats data oftener than every PGSTAT_STAT_INTERVAL msec.  Backends will not
make requests at all if they see the existing data is newer than that, and
the stats collector is supposed to disregard requests having a cutoff_time
older than its most recently written data, so that close-together requests
don't result in multiple writes.  But the latter part of that got broken
in commit 187492b6c2e8cafc, so that if two backends concurrently decide
the existing stats are too old, the collector would write the data twice.
(In principle the collector's logic would still merge requests as long as
the second one arrives before we've actually written data ... but since
the message collection loop would write data immediately after processing
a single inquiry message, that never happened in practice, and in any case
the window in which it might work would be much shorter than
PGSTAT_STAT_INTERVAL.)

To fix, improve pgstat_recv_inquiry so that it checks whether the cutoff
time is too old, and doesn't add a request to the queue if so.  This means
that we do not need DBWriteRequest.request_time, because the decision is
taken before making a queue entry.  And that means that we don't really
need the DBWriteRequest data structure at all; an OID list of database
OIDs will serve and allow removal of some rather verbose and crufty code.

In passing, improve the comments in this area, which have been rather
neglected.  Also change backend_read_statsfile so that it's not silently
relying on MyDatabaseId to have some particular value in the autovacuum
launcher process.  It accidentally worked as desired because MyDatabaseId
is zero in that process; but that does not seem like a dependency we want,
especially with no documentation about it.

Although this patch is mine, it turns out I'd rediscovered a known bug,
for which Tomas Vondra had already submitted a patch that's functionally
equivalent to the non-cosmetic aspects of this patch.  Thanks to Tomas
for reviewing this version.

Back-patch to 9.3 where the bug was introduced.

Prior-Discussion: <1718942738eb65c8407fcd864883f4c8@fuzzy.cz>
Patch: <4625.1464202586@sss.pgh.pa.us>

8 years agoFix whitespace
Peter Eisentraut [Tue, 31 May 2016 17:56:25 +0000 (13:56 -0400)]
Fix whitespace

8 years agoFix typo in CREATE DATABASE syntax synopsis.
Tom Lane [Tue, 31 May 2016 16:05:22 +0000 (12:05 -0400)]
Fix typo in CREATE DATABASE syntax synopsis.

Misplaced "]", evidently a thinko in commit 213335c14.

8 years agoMirror struct Aggref field order in _copyAggref().
Noah Misch [Tue, 31 May 2016 04:01:03 +0000 (00:01 -0400)]
Mirror struct Aggref field order in _copyAggref().

This is cosmetic, and no supported release has the affected fields.

8 years agoMove memory barrier in UnlockBufHdr to before releasing the lock.
Andres Freund [Mon, 30 May 2016 22:35:53 +0000 (15:35 -0700)]
Move memory barrier in UnlockBufHdr to before releasing the lock.

This bug appears to have been introduced late in the development of
48354581a4 ("Allow Pin/UnpinBuffer to operate in a lockfree
manner.").

Found while debugging a bug which turned out to be independent of the
commit mentioned above.

Backpatch: -

8 years agoFix PageAddItem BRIN bug
Alvaro Herrera [Mon, 30 May 2016 18:47:22 +0000 (14:47 -0400)]
Fix PageAddItem BRIN bug

BRIN was relying on the ability to remove a tuple from an index page,
then putting another tuple in the same line pointer.  But PageAddItem
refuses to add a tuple beyond the first free item past the last used
item, and in particular, it rejects an attempt to add an item to an
empty page anywhere other than the first line pointer.  PageAddItem
issues a WARNING and indicates to the caller that it failed, which in
turn causes the BRIN calling code to issue a PANIC, so the whole
sequence looks like this:
WARNING:  specified item offset is too large
PANIC:  failed to add BRIN tuple

To fix, create a new function PageAddItemExtended which is like
PageAddItem except that the two boolean arguments become a flags bitmap;
the "overwrite" and "is_heap" boolean flags in PageAddItem become
PAI_OVERWITE and PAI_IS_HEAP flags in the new function, and a new flag
PAI_ALLOW_FAR_OFFSET enables the behavior required by BRIN.
PageAddItem() retains its original signature, for compatibility with
third-party modules (other callers in core code are not modified,
either).

Also, in the belt-and-suspenders spirit, I added a new sanity check in
brinGetTupleForHeapBlock to raise an error if an TID found in the revmap
is not marked as live by the page header.  This causes it to react with
"ERROR: corrupted BRIN index" to the bug at hand, rather than a hard
crash.

Backpatch to 9.5.

Bug reported by Andreas Seltenreich as detected by his handy sqlsmith
fuzzer.
Discussion: https://www.postgresql.org/message-id/87mvni77jh.fsf@elite.ansel.ydns.eu

8 years agoFix missing abort checks in pg_backup_directory.c.
Tom Lane [Sun, 29 May 2016 17:18:48 +0000 (13:18 -0400)]
Fix missing abort checks in pg_backup_directory.c.

Parallel restore from directory format failed to respond to control-C
in a timely manner, because there were no checkAborting() calls in the
code path that reads data from a file and sends it to the backend.
If any worker was in the midst of restoring data for a large table,
you'd just have to wait.

This fix doesn't do anything for the problem of aborting a long-running
server-side command, but at least it fixes things for data transfers.

Back-patch to 9.3 where parallel restore was introduced.

8 years agoRemove pg_dump/parallel.c's useless "aborting" flag.
Tom Lane [Sun, 29 May 2016 17:00:09 +0000 (13:00 -0400)]
Remove pg_dump/parallel.c's useless "aborting" flag.

This was effectively dead code, since the places that tested it could not
be reached after we entered the on-exit-cleanup routine that would set it.
It seems to have been a leftover from a design in which error abort would
try to send fresh commands to the workers --- a design which could never
have worked reliably, of course.  Since the flag is not cross-platform, it
complicates reasoning about the code's behavior, which we could do without.

Although this is effectively just cosmetic, back-patch anyway, because
there are some actual bugs in the vicinity of this behavior.

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

8 years agoLots of comment-fixing, and minor cosmetic cleanup, in pg_dump/parallel.c.
Tom Lane [Sat, 28 May 2016 18:02:11 +0000 (14:02 -0400)]
Lots of comment-fixing, and minor cosmetic cleanup, in pg_dump/parallel.c.

The commentary in this file was in extremely sad shape.  The author(s)
had clearly never heard of the project convention that a function header
comment should provide an API spec of some sort for that function.  Much
of it was flat out wrong, too --- maybe it was accurate when written, but
if so it had not been updated to track subsequent code revisions.  Rewrite
and rearrange to try to bring it up to speed, and annotate some of the
places where more work is needed.  (I've refrained from actually fixing
anything of substance ... yet.)

Also, rename a couple of functions for more clarity as to what they do,
do some very minor code rearrangement, remove some pointless Asserts,
fix an incorrect Assert in readMessageFromPipe, and add a missing socket
close in one error exit from pgpipe().  The last would be a bug if we
tried to continue after pgpipe() failure, but since we don't, it's just
cosmetic at present.

Although this is only cosmetic, back-patch to 9.3 where parallel.c was
added.  It's sufficiently invasive that it'll pose a hazard for future
back-patching if we don't.

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

8 years agoClean up thread management in parallel pg_dump for Windows.
Tom Lane [Fri, 27 May 2016 16:02:09 +0000 (12:02 -0400)]
Clean up thread management in parallel pg_dump for Windows.

Since we start the worker threads with _beginthreadex(), we should use
_endthreadex() to terminate them.  We got this right in the normal-exit
code path, but not so much during an error exit from a worker.
In addition, be sure to apply CloseHandle to the thread handle after
each thread exits.

It's not clear that these oversights cause any user-visible problems,
since the pg_dump run is about to terminate anyway.  Still, it's clearly
better to follow Microsoft's API specifications than ignore them.

Also a few cosmetic cleanups in WaitForTerminatingWorkers(), including
being a bit less random about where to cast between uintptr_t and HANDLE,
and being sure to clear the worker identity field for each dead worker
(not that false matches should be possible later, but let's be careful).

Original observation and patch by Armin Schöffmann, cosmetic improvements
by Michael Paquier and me.  (Armin's patch also included closing sockets
in ShutdownWorkersHard(), but that's been dealt with already in commit
df8d2d8c4.)  Back-patch to 9.3 where parallel pg_dump was introduced.

Discussion: <zarafa.570306bd.3418.074bf1420d8f2ba2@root.aegaeon.de>

8 years agoFix release-note typo.
Tom Lane [Fri, 27 May 2016 15:07:23 +0000 (11:07 -0400)]
Fix release-note typo.

Léonard Benedetti

8 years agoFix DROP ACCESS METHOD IF EXISTS.
Tom Lane [Fri, 27 May 2016 15:03:18 +0000 (11:03 -0400)]
Fix DROP ACCESS METHOD IF EXISTS.

The IF EXISTS option was documented, and implemented in the grammar, but
it didn't actually work for lack of support in does_not_exist_skipping().
Per bug #14160.

Report and patch by Kouhei Sutou

Report: <20160527070433.19424.81712@wrigleys.postgresql.org>

8 years agoBe more predictable about reporting "lock timeout" vs "statement timeout".
Tom Lane [Fri, 27 May 2016 14:40:20 +0000 (10:40 -0400)]
Be more predictable about reporting "lock timeout" vs "statement timeout".

If both timeout indicators are set when we arrive at ProcessInterrupts,
we've historically just reported "lock timeout".  However, some buildfarm
members have been observed to fail isolationtester's timeouts test by
reporting "lock timeout" when the statement timeout was expected to fire
first.  The cause seems to be that the process is allowed to sleep longer
than expected (probably due to heavy machine load) so that the lock
timeout happens before we reach the point of reporting the error, and
then this arbitrary tiebreak rule does the wrong thing.  We can improve
matters by comparing the scheduled timeout times to decide which error
to report.

I had originally proposed greatly reducing the 1-second window between
the two timeouts in the test cases.  On reflection that is a bad idea,
at least for the case where the lock timeout is expected to fire first,
because that would assume that it takes negligible time to get from
statement start to the beginning of the lock wait.  Thus, this patch
doesn't completely remove the risk of test failures on slow machines.
Empirically, however, the case this handles is the one we are seeing
in the buildfarm.  The explanation may be that the other case requires
the scheduler to take the CPU away from a busy process, whereas the
case fixed here only requires the scheduler to not give the CPU back
right away to a process that has been woken from a multi-second sleep
(and, perhaps, has been swapped out meanwhile).

Back-patch to 9.3 where the isolationtester timeouts test was added.

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

8 years agoMake pg_dump error cleanly with -j against hot standby
Magnus Hagander [Thu, 26 May 2016 20:14:23 +0000 (22:14 +0200)]
Make pg_dump error cleanly with -j against hot standby

Getting a synchronized snapshot is not supported on a hot standby node,
and is by default taken when using -j with multiple sessions. Trying to
do so still failed, but with a server error that would also go in the
log. Instead, proprely detect this case and give a better error message.

8 years agoDisable physical tlist if any Var would need multiple sortgroupref labels.
Tom Lane [Thu, 26 May 2016 18:52:24 +0000 (14:52 -0400)]
Disable physical tlist if any Var would need multiple sortgroupref labels.

As part of upper planner pathification (commit 3fc6e2d7f5b652b4) I redid
createplan.c's approach to the physical-tlist optimization, in which scan
nodes are allowed to return exactly the underlying table's columns so as
to save doing a projection step at runtime.  The logic was intentionally
more aggressive than before about applying the optimization, which is
generally a good thing, but Andres Freund found a case in which it got
too aggressive.  Namely, if any column is referenced more than once in
the parent plan node's sorting or grouping column list, we can't optimize
because then that column would need to have more than one ressortgroupref
label, and we only have space for one.

Add logic to detect this situation in use_physical_tlist(), and also add
some error checking in apply_pathtarget_labeling_to_tlist(), which this
example proves was being overly cavalier about whether what it was doing
made any sense.

The added test case exposes the problem only because we do not eliminate
duplicate grouping keys.  That might be something to fix someday, but it
doesn't seem like appropriate post-beta work.

Report: <20160526021235.w4nq7k3gnheg7vit@alap3.anarazel.de>

8 years agoFix typo in 9.5 release nodes
Alvaro Herrera [Thu, 26 May 2016 15:58:22 +0000 (11:58 -0400)]
Fix typo in 9.5 release nodes

Noted by 星合 拓馬 (HOSHIAI Takuma)

8 years agoMake pg_dump behave more sanely when built without HAVE_LIBZ.
Tom Lane [Thu, 26 May 2016 15:51:04 +0000 (11:51 -0400)]
Make pg_dump behave more sanely when built without HAVE_LIBZ.

For some reason the code to emit a warning and switch to uncompressed
output was placed down in the guts of pg_backup_archiver.c.  This is
definitely too late in the case of parallel operation (and I rather
wonder if it wasn't too late for other purposes as well).  Put it in
pg_dump.c's option-processing logic, which seems a much saner place.

Also, the default behavior with custom or directory output format was
to emit the warning telling you the output would be uncompressed.  This
seems unhelpful, so silence that case.

Back-patch to 9.3 where parallel dump was introduced.

Kyotaro Horiguchi, adjusted a bit by me

Report: <20160526.185551.242041780.horiguchi.kyotaro@lab.ntt.co.jp>

8 years agoIn Windows pg_dump, ensure idle workers will shut down during error exit.
Tom Lane [Thu, 26 May 2016 14:50:30 +0000 (10:50 -0400)]
In Windows pg_dump, ensure idle workers will shut down during error exit.

The Windows coding of ShutdownWorkersHard() thought that setting termEvent
was sufficient to make workers exit after an error.  But that only helps
if a worker is busy and passes through checkAborting().  An idle worker
will just sit, resulting in pg_dump failing to exit until the user gives up
and hits control-C.  We should close the write end of the command pipe
so that idle workers will see socket EOF and exit, as the Unix coding was
already doing.

Back-patch to 9.3 where parallel pg_dump was introduced.

Kyotaro Horiguchi

8 years agoRemove option to write USING before opclass name in CREATE INDEX.
Tom Lane [Wed, 25 May 2016 23:11:00 +0000 (19:11 -0400)]
Remove option to write USING before opclass name in CREATE INDEX.

Dating back to commit f10b63923, our grammar has allowed "USING" to
optionally appear before an opclass name in CREATE INDEX (and, lately,
some related places such as ON CONFLICT specifications).  Nikolay Shaplov
noticed that this syntax existed but wasn't documented, and proposed
documenting it.  But what seems like a better idea is to remove the
production, thereby making the code match the docs not vice versa.
This isn't our usual modus operandi for such cases, but there are a
couple of good reasons to proceed this way:

* So far as I can find, this syntax has never been documented anywhere.
It isn't relied on by any of our own code or test cases, and there seems
little reason to suppose that it's been used in the wild either.

* Documenting it would mean that there would be two separate uses of
USING in the CREATE INDEX syntax, the other being "USING access_method".
That can lead to nothing but confusion.

So, let's just remove it.  On the off chance that somebody somewhere
is using it, this isn't something to back-patch, but we can fix it
in HEAD.

Discussion: <1593237.l7oKHRpxSe@nataraj-amd64>

8 years agoEnsure that backends see up-to-date statistics for shared catalogs.
Tom Lane [Wed, 25 May 2016 21:48:15 +0000 (17:48 -0400)]
Ensure that backends see up-to-date statistics for shared catalogs.

Ever since we split the statistics collector's reports into per-database
files (commit 187492b6c2e8cafc), backends have been seeing stale statistics
for shared catalogs.  This is because the inquiry message only prompts the
collector to write the per-database file for the requesting backend's own
database.  Stats for shared catalogs are in a separate file for "DB 0",
which didn't get updated.

In normal operation this was partially masked by the fact that the
autovacuum launcher would send an inquiry message at least once per
autovacuum_naptime that asked for "DB 0"; so the shared-catalog stats would
never be more than a minute out of date.  However the problem becomes very
obvious with autovacuum disabled, as reported by Peter Eisentraut.

To fix, redefine the semantics of inquiry messages so that both the
specified DB and DB 0 will be dumped.  (This might seem a bit inefficient,
but we have no good way to know whether a backend's transaction will look
at shared-catalog stats, so we have to read both groups of stats whenever
we request stats.  Sending two inquiry messages would definitely not be
better.)

Back-patch to 9.3 where the bug was introduced.

Report: <56AD41AC.1030509@gmx.net>

8 years agoFix broken error handling in parallel pg_dump/pg_restore.
Tom Lane [Wed, 25 May 2016 16:39:57 +0000 (12:39 -0400)]
Fix broken error handling in parallel pg_dump/pg_restore.

In the original design for parallel dump, worker processes reported errors
by sending them up to the master process, which would print the messages.
This is unworkably fragile for a couple of reasons: it risks deadlock if a
worker sends an error at an unexpected time, and if the master has already
died for some reason, the user will never get to see the error at all.
Revert that idea and go back to just always printing messages to stderr.
This approach means that if all the workers fail for similar reasons (eg,
bad password or server shutdown), the user will see N copies of that
message, not only one as before.  While that's slightly annoying, it's
certainly better than not seeing any message; not to mention that we
shouldn't assume that only the first failure is interesting.

An additional problem in the same area was that the master failed to
disable SIGPIPE (at least until much too late), which meant that sending a
command to an already-dead worker would cause the master to crash silently.
That was bad enough in itself but was made worse by the total reliance on
the master to print errors: even if the worker had reported an error, you
would probably not see it, depending on timing.  Instead disable SIGPIPE
right after we've forked the workers, before attempting to send them
anything.

Additionally, the master relies on seeing socket EOF to realize that a
worker has exited prematurely --- but on Windows, there would be no EOF
since the socket is attached to the process that includes both the master
and worker threads, so it remains open.  Make archive_close_connection()
close the worker end of the sockets so that this acts more like the Unix
case.  It's not perfect, because if a worker thread exits without going
through exit_nicely() the closures won't happen; but that's not really
supposed to happen.

This has been wrong all along, so back-patch to 9.3 where parallel dump
was introduced.

Report: <2458.1450894615@sss.pgh.pa.us>

8 years agoUpdate doc text to reflect new column in MVCC phenomena table.
Kevin Grittner [Wed, 25 May 2016 16:17:08 +0000 (11:17 -0500)]
Update doc text to reflect new column in MVCC phenomena table.

Scott Wehrenberg

8 years agoDo not DROP default roles in pg_dumpall -c
Stephen Frost [Wed, 25 May 2016 03:31:55 +0000 (23:31 -0400)]
Do not DROP default roles in pg_dumpall -c

When pulling the list of roles to drop, exclude roles whose names
begin with "pg_" (as we do when we are dumping the roles out to
recreate them).

Also add regression tests to cover pg_dumpall -c and this specific
issue.

Noticed by Rushabh Lathia.  Patch by me.

8 years agoMark wal_level as PGDLLIMPORT.
Tom Lane [Wed, 25 May 2016 02:48:47 +0000 (22:48 -0400)]
Mark wal_level as PGDLLIMPORT.

Per buildfarm, this is needed to allow extensions to use XLogIsNeeded()
in Windows builds.

8 years agoFix contrib/bloom to work for unlogged indexes.
Tom Lane [Wed, 25 May 2016 01:04:23 +0000 (21:04 -0400)]
Fix contrib/bloom to work for unlogged indexes.

blbuildempty did not do even approximately the right thing: it tried
to add a metapage to the relation's regular data fork, which already
has one at that point.  It should look like the ambuildempty methods
for all the standard index types, ie, initialize a metapage image in
some transient storage and then write it directly to the init fork.
To support that, refactor BloomInitMetapage into two functions.

In passing, fix BloomInitMetapage so it doesn't leave the rd_options
field of the index's relcache entry pointing at transient storage.
I'm not sure this had any visible consequence, since nothing much
else is likely to look at a bloom index's rd_options, but it's
certainly poor practice.

Per bug #14155 from Zhou Digoal.

Report: <20160524144146.22598.42558@wrigleys.postgresql.org>

8 years agoQualify table usage in dumpTable() and use regclass
Stephen Frost [Wed, 25 May 2016 00:10:16 +0000 (20:10 -0400)]
Qualify table usage in dumpTable() and use regclass

All of the other tables used in the query in dumpTable(), which is
collecting column-level ACLs, are qualified, so we should be qualifying
the pg_init_privs, the related sub-select against pg_class and the
other queries added by the pg_dump catalog ACLs work.

Also, use ::regclass (or ::pg_catalog.regclass, where appropriate)
instead of using a poorly constructed query to get the OID for various
catalog tables.

Issues identified by Noah and Alvaro, patch by me.

8 years agoFetch XIDs atomically during vac_truncate_clog().
Tom Lane [Tue, 24 May 2016 19:47:51 +0000 (15:47 -0400)]
Fetch XIDs atomically during vac_truncate_clog().

Because vac_update_datfrozenxid() updates datfrozenxid and datminmxid
in-place, it's unsafe to assume that successive reads of those values will
give consistent results.  Fetch each one just once to ensure sane behavior
in the minimum calculation.  Noted while reviewing Alexander Korotkov's
patch in the same area.

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

8 years agoAvoid consuming an XID during vac_truncate_clog().
Tom Lane [Tue, 24 May 2016 19:20:12 +0000 (15:20 -0400)]
Avoid consuming an XID during vac_truncate_clog().

vac_truncate_clog() uses its own transaction ID as the comparison point in
a sanity check that no database's datfrozenxid has already wrapped around
"into the future".  That was probably fine when written, but in a lazy
vacuum we won't have assigned an XID, so calling GetCurrentTransactionId()
causes an XID to be assigned when otherwise one would not be.  Most of the
time that's not a big problem ... but if we are hard up against the
wraparound limit, consuming XIDs during antiwraparound vacuums is a very
bad thing.

Instead, use ReadNewTransactionId(), which not only avoids this problem
but is in itself a better comparison point to test whether wraparound
has already occurred.

Report and patch by Alexander Korotkov.  Back-patch to all versions.

Report: <CAPpHfdspOkmiQsxh-UZw2chM6dRMwXAJGEmmbmqYR=yvM7-s6A@mail.gmail.com>

8 years agoFix range check for effective_io_concurrency
Alvaro Herrera [Tue, 24 May 2016 18:55:34 +0000 (14:55 -0400)]
Fix range check for effective_io_concurrency

Commit 1aba62ec moved the range check of that option form guc.c into
bufmgr.c, but introduced a bug by changing a >= 0.0 to > 0.0, which made
the value 0 no longer accepted.  Put it back.

Reported by Jeff Janes, diagnosed by Tom Lane

8 years agoDocs: mention pg_reload_conf() in ALTER SYSTEM reference page.
Tom Lane [Tue, 24 May 2016 18:04:29 +0000 (14:04 -0400)]
Docs: mention pg_reload_conf() in ALTER SYSTEM reference page.

Takayuki Tsunakawa

Discussion: <0A3221C70F24FB45833433255569204D1F578FC3@G01JPEXMBYT05>

8 years agoIn examples of Oracle PL/SQL code, use varchar2 not varchar.
Tom Lane [Tue, 24 May 2016 17:30:40 +0000 (13:30 -0400)]
In examples of Oracle PL/SQL code, use varchar2 not varchar.

Oracle recommends using VARCHAR2 not VARCHAR, allegedly because they might
someday change VARCHAR to be spec-compliant about distinguishing null from
empty string.  (I'm not holding my breath, though.)  Our examples of PL/SQL
code were using VARCHAR, which while not wrong is missing the pedagogical
opportunity to talk about converting Oracle type names to Postgres.  So
switch the examples to use VARCHAR2, and add some text about what to do
with common Oracle type names like VARCHAR2 and NUMBER.  (There is probably
more to be said here, but those are the ones I'm sure about offhand.)
Per suggestion from rapg12@gmail.com.

Discussion: <20160521140046.22591.24672@wrigleys.postgresql.org>

8 years agoFix typo in docs
Teodor Sigaev [Tue, 24 May 2016 12:27:48 +0000 (15:27 +0300)]
Fix typo in docs

Add missing USING BLOOM in example of contrib/bloom

Nikolay Shaplov

8 years agoFix typo in TAP test identification string.
Tom Lane [Tue, 24 May 2016 00:04:27 +0000 (20:04 -0400)]
Fix typo in TAP test identification string.

Michael Paquier

8 years agoFix BTREE_BUILD_STATS build.
Tom Lane [Mon, 23 May 2016 23:41:11 +0000 (19:41 -0400)]
Fix BTREE_BUILD_STATS build.

Commit 65c5fcd353a859da9e61bfb2b92a99f12937de3b broke this by removing a
header include directive that is conditionally required.  Add that back
to nbtree.c, with annotation to keep pgrminclude from re-breaking it.

Peter Geoghegan

Report: <CAM3SWZTNjHFYW_UG8bu0BnogqQ2HfsTgkzXLueuUhfTcYbu5HA@mail.gmail.com>

8 years agoSupport IndexElem in raw_expression_tree_walker().
Tom Lane [Mon, 23 May 2016 23:23:36 +0000 (19:23 -0400)]
Support IndexElem in raw_expression_tree_walker().

Needed for cases in which INSERT ... ON CONFLICT appears inside a
recursive CTE item.  Per bug #14153 from Thomas Alton.

Patch by Peter Geoghegan, slightly adjusted by me

Report: <20160521232802.22598.13537@wrigleys.postgresql.org>

8 years agoAdd support for more extensive testing of raw_expression_tree_walker().
Tom Lane [Mon, 23 May 2016 23:08:26 +0000 (19:08 -0400)]
Add support for more extensive testing of raw_expression_tree_walker().

If RAW_EXPRESSION_COVERAGE_TEST is defined, do a no-op tree walk over
every basic DML statement submitted to parse analysis.  If we'd had this
in place earlier, bug #14153 would have been caught by buildfarm testing.
The difficulty is that raw_expression_tree_walker() is only used in
limited cases involving CTEs (particularly recursive ones), so it's
very easy for an oversight in it to not be noticed during testing of a
seemingly-unrelated feature.

The type of error we can expect to catch with this is complete omission
of a node type from raw_expression_tree_walker(), and perhaps also
recursion into a field that doesn't contain a node tree, though that
would be an unlikely mistake.  It won't catch failure to add new fields
that need to be recursed into, unfortunately.

I'll go enable this on one or two of my own buildfarm animals once
bug #14153 is dealt with.

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

8 years agoFix latent crash in do_text_output_multiline().
Tom Lane [Mon, 23 May 2016 18:16:40 +0000 (14:16 -0400)]
Fix latent crash in do_text_output_multiline().

do_text_output_multiline() would fail (typically with a null pointer
dereference crash) if its input string did not end with a newline.  Such
cases do not arise in our current sources; but it certainly could happen
in future, or in extension code's usage of the function, so we should fix
it.  To fix, replace "eol += len" with "eol = text + len".

While at it, make two cosmetic improvements: mark the input string const,
and rename the argument from "text" to "txt" to dodge pgindent strangeness
(since "text" is a typedef name).

Even though this problem is only latent at present, it seems like a good
idea to back-patch the fix, since it's a very simple/safe patch and it's
not out of the realm of possibility that we might in future back-patch
something that expects sane behavior from do_text_output_multiline().

Per report from Hao Lee.

Report: <CAGoxFiFPAGyPAJLcFxTB5cGhTW2yOVBDYeqDugYwV4dEd1L_Ag@mail.gmail.com>