]> granicus.if.org Git - postgresql/log
postgresql
8 years agoDocs typo fix.
Tom Lane [Fri, 17 Jun 2016 22:23:39 +0000 (18:23 -0400)]
Docs typo fix.

Guillaume Lelarge

8 years agoFinish up XLOG_HINT renaming
Alvaro Herrera [Fri, 17 Jun 2016 22:05:55 +0000 (18:05 -0400)]
Finish up XLOG_HINT renaming

Commit b8fd1a09f3 renamed XLOG_HINT to XLOG_FPI, but neglected two
places.

Backpatch to 9.3, like that commit.

8 years agopg_visibility: Add pg_truncate_visibility_map function.
Robert Haas [Fri, 17 Jun 2016 21:37:30 +0000 (17:37 -0400)]
pg_visibility: Add pg_truncate_visibility_map function.

This requires some core changes as well so that we can properly
WAL-log the truncation.  Specifically, it changes the format of the
XLOG_SMGR_TRUNCATE WAL record, so bump XLOG_PAGE_MAGIC.

Patch by me, reviewed but not fully endorsed by Andres Freund.

8 years agoTry again to fix the way the scanjoin_target is used with partial paths.
Robert Haas [Fri, 17 Jun 2016 20:25:02 +0000 (16:25 -0400)]
Try again to fix the way the scanjoin_target is used with partial paths.

Commit 04ae11f62e643e07c411c4935ea6af46cb112aa9 removed some broken
code to apply the scan/join target to partial paths, but its theory
that this processing step is totally unnecessary turns out to be wrong.
Put similar code back again, but this time, check for parallel-safety
and avoid in-place modifications to paths that may already have been
used as part of some other path.

(This is not an entirely elegant solution to this problem; it might
be better, for example, to postpone generate_gather_paths for the
topmost scan/join rel until after the scan/join target has been
applied.  But this is not the time for such redesign work.)

Amit Kapila and Robert Haas

8 years agoAdd VACUUM (DISABLE_PAGE_SKIPPING) for emergencies.
Robert Haas [Fri, 17 Jun 2016 19:48:57 +0000 (15:48 -0400)]
Add VACUUM (DISABLE_PAGE_SKIPPING) for emergencies.

If you really want to vacuum every single page in the relation,
regardless of apparent visibility status or anything else, you can use
this option.  In previous releases, this behavior could be achieved
using VACUUM (FREEZE), but because we can now recognize all-frozen
pages as not needing to be frozen again, that no longer works.  There
should be no need for routine use of this option, but maybe bugs or
disaster recovery will necessitate its use.

Patch by me, reviewed by Andres Freund.

8 years agoUpdate dblink extension for parallel query.
Robert Haas [Fri, 17 Jun 2016 19:09:57 +0000 (15:09 -0400)]
Update dblink extension for parallel query.

Almost all functions provided by this extension are PARALLEL
RESTRICTED.  Mostly, that's because the leader's TCP connections won't
be shared with the workers, but in some cases like dblink_get_pkey
it's because they obtain locks which might be released early if taken
within a parallel worker.  dblink_fdw_validator probably can't be used
in a query anyway, but there would be no problem from the point of
view of parallel query if it were, so it's PARALLEL SAFE.

Andreas Karlsson

8 years agopostgres_fdw: Rephrase comment.
Robert Haas [Fri, 17 Jun 2016 17:01:14 +0000 (13:01 -0400)]
postgres_fdw: Rephrase comment.

Per gripe from Thomas Munro, who only complained about a more
localized problem, but I couldn't resist a bit more wordsmithing.

8 years agoFix typo.
Robert Haas [Fri, 17 Jun 2016 16:55:30 +0000 (12:55 -0400)]
Fix typo.

Thomas Munro

8 years agoRemove PID from 'parallel worker' context message.
Robert Haas [Fri, 17 Jun 2016 13:24:29 +0000 (09:24 -0400)]
Remove PID from 'parallel worker' context message.

Discussion: <bfd204ab-ab1a-792a-b345-0274a09a4b5f@2ndquadrant.com>

8 years agoAttempt to fix broken regression test.
Robert Haas [Fri, 17 Jun 2016 12:35:47 +0000 (08:35 -0400)]
Attempt to fix broken regression test.

In commit 8c1d9d56e9a00680a035b8b333a98ea16b121eb7, I attempted to
add a regression test that would fail if the target list was pushed
into a parallel worker, but due to brain fade on my part, it just
randomly fails whether anything bad or not, because the error check
inside the parallel_restricted() function tests whether there is
*any process in the system* that is not connected to a client, not
whether the process running the query is not connected to a client.

A little experimentation has left me pessimistic about the
prospects of doing better here in a short amount of time, so let's
just fall back to checking that the plan is as we expect and leave
the execution-time check for another day.

8 years agoFix validation of overly-long IPv6 addresses.
Tom Lane [Thu, 16 Jun 2016 21:16:32 +0000 (17:16 -0400)]
Fix validation of overly-long IPv6 addresses.

The inet/cidr types sometimes failed to reject IPv6 inputs with too many
colon-separated fields, instead translating them to '::/0'.  This is the
result of a thinko in the original ISC code that seems to be as yet
unreported elsewhere.  Per bug #14198 from Stefan Kaltenbrunner.

Report: <20160616182222.5798.959@wrigleys.postgresql.org>

8 years agoFix fuzzy thinking in ReinitializeParallelDSM().
Tom Lane [Thu, 16 Jun 2016 19:20:29 +0000 (15:20 -0400)]
Fix fuzzy thinking in ReinitializeParallelDSM().

The fact that no workers were successfully launched in the previous
iteration does not excuse us from setting up properly to try again.
This appears to explain crashes I saw in parallel regression testing
due to error_mqh being NULL when it shouldn't be.

Minor other cosmetic fixes too.

8 years agoInvent min_parallel_relation_size GUC to replace a hard-wired constant.
Tom Lane [Thu, 16 Jun 2016 17:47:20 +0000 (13:47 -0400)]
Invent min_parallel_relation_size GUC to replace a hard-wired constant.

The main point of doing this is to allow the cutoff to be set very small,
even zero, to allow parallel-query behavior to be tested on relatively
small tables such as we typically use in the regression tests.  But it
might be of use to users too.  The number-of-workers scaling behavior in
create_plain_partial_paths() is pretty ad-hoc and subject to change, so
we won't expose anything about that, but the notion of not considering
parallel query at all for tables below size X seems reasonably stable.

Amit Kapila, per a suggestion from me

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

8 years agoReword bogus comment
Alvaro Herrera [Thu, 16 Jun 2016 16:43:35 +0000 (12:43 -0400)]
Reword bogus comment

8 years agoAvoid crash in "postgres -C guc" for a GUC with a null string value.
Tom Lane [Thu, 16 Jun 2016 16:17:03 +0000 (12:17 -0400)]
Avoid crash in "postgres -C guc" for a GUC with a null string value.

Emit "(null)" instead, which was the behavior all along on platforms
that don't crash, eg OS X.  Per report from Jehan-Guillaume de Rorthais.
Back-patch to 9.2 where -C option was introduced.

Michael Paquier

Report: <20160615204036.2d35d86a@firost>

8 years agoRemove unused prototype
Alvaro Herrera [Thu, 16 Jun 2016 16:06:51 +0000 (12:06 -0400)]
Remove unused prototype

Commit 6f56b41ac0cd7 removed function get_pg_database_relfilenode but left
its prototype in place.  Remove it.

8 years agoAdd regression test for 04ae11f62e643e07c411c4935ea6af46cb112aa9.
Robert Haas [Thu, 16 Jun 2016 16:00:55 +0000 (12:00 -0400)]
Add regression test for 04ae11f62e643e07c411c4935ea6af46cb112aa9.

The code in this area needs further revision, and it would be best
not to re-break the things we've already fixed.

Per a gripe from Tom Lane.

8 years agoUse strftime("%c") to format timestamps in psql's \watch command.
Tom Lane [Wed, 15 Jun 2016 23:31:08 +0000 (19:31 -0400)]
Use strftime("%c") to format timestamps in psql's \watch command.

This allows the timestamps to follow local conventions (in particular,
they respond to the LC_TIME environment setting).  In C locale you get
the same results as before.  It seems like a good idea to do this now not
later because we already changed the format of \watch headers for 9.6.

Also, increase the buffer sizes a tad to ensure there's enough space for
translated strings.

Discussion: <20160612145532.GA22965@postgresql.kr>

8 years agoFix regression test for force_parallel_mode=on.
Robert Haas [Wed, 15 Jun 2016 18:59:07 +0000 (14:59 -0400)]
Fix regression test for force_parallel_mode=on.

Commit 14a254fb52423c57059851abafbd1247261f7f03 managed not to
exercise the code it was intended to test, and the comment explaining
why no "parallel worker" line showed up in the context wasn't right.

Amit Kapila, tweaked by me per Amit's analysis.

8 years agoAdd integrity-checking functions to pg_visibility.
Robert Haas [Wed, 15 Jun 2016 18:33:58 +0000 (14:33 -0400)]
Add integrity-checking functions to pg_visibility.

The new pg_check_visible() and pg_check_frozen() functions can be used to
verify that the visibility map bits for a relation's data pages match the
actual state of the tuples on those pages.

Amit Kapila and Robert Haas, reviewed (in earlier versions) by Andres
Freund.  Additional testing help by Thomas Munro.

8 years agoFix lazy_scan_heap so that it won't mark pages all-frozen too soon.
Robert Haas [Wed, 15 Jun 2016 18:23:39 +0000 (14:23 -0400)]
Fix lazy_scan_heap so that it won't mark pages all-frozen too soon.

Commit a892234f830e832110f63fc0a2afce2fb21d1584 added a new bit per
page to the visibility map fork indicating whether the page is
all-frozen, but incorrectly assumed that if lazy_scan_heap chose to
freeze a tuple then that tuple would not need to later be frozen
again. This turns out to be false, because xmin and xmax (and
conceivably xvac, if dealing with tuples from very old releases) could
be frozen at separate times.

Thanks to Andres Freund for help in uncovering and tracking down this
issue.

8 years agoMark some functions parallel-unsafe.
Robert Haas [Wed, 15 Jun 2016 15:40:07 +0000 (11:40 -0400)]
Mark some functions parallel-unsafe.

currtid() and currtid2() call GetLatestSnapshot(), which fails in
parallel mode.  pg_export_snapshot() calls ExportSnapshot() which
attempts to assign an XID for the current transaction if it does not
already have one; that, too, will fail in parallel mode.

Andreas Seltenreich

8 years agoForce idle_in_transaction_session_timeout off in pg_dump and autovacuum.
Tom Lane [Wed, 15 Jun 2016 14:52:53 +0000 (10:52 -0400)]
Force idle_in_transaction_session_timeout off in pg_dump and autovacuum.

We disable statement_timeout and lock_timeout during dump and restore, to
prevent any global settings that might exist from breaking routine backups.
Commit c6dda1f48 should have added idle_in_transaction_session_timeout to
that list, but failed to.

Another place where these timeouts get turned off is autovacuum.  While
I doubt an idle timeout could fire there, it seems better to be safe than
sorry.

pg_dump issue noted by Bernd Helmle, the other one found by grepping.

Report: <352F9B77DB5D3082578D17BB@eje.land.credativ.lan>

8 years agoPL/Python: Clean up extended error reporting docs and tests
Peter Eisentraut [Wed, 15 Jun 2016 14:34:11 +0000 (10:34 -0400)]
PL/Python: Clean up extended error reporting docs and tests

Format the example and test code more to Python style standards.
Improve whitespace.  Improve documentation formatting.

8 years agodocument when PREPARE uses generic plans
Bruce Momjian [Tue, 14 Jun 2016 20:11:46 +0000 (16:11 -0400)]
document when PREPARE uses generic plans

Also explain how generic plans are created.
Link to PREPARE docs from wire-protocol prepare docs.

Reported-by: Jonathan Rogers
Discussion: https://www.postgresql.org/message-id/flat/561E749D.4090301%40socialserve.com

8 years agoUpdate xml2 extension for parallel query.
Robert Haas [Tue, 14 Jun 2016 19:49:32 +0000 (15:49 -0400)]
Update xml2 extension for parallel query.

All functions provided by this extension are PARALLEL SAFE.

Andreas Karlsson

8 years agoUpdate uuid-ossp extension for parallel query.
Robert Haas [Tue, 14 Jun 2016 18:56:21 +0000 (14:56 -0400)]
Update uuid-ossp extension for parallel query.

All functions provided by this extension are PARALLEL SAFE.

Andreas Karlsson

8 years agoUpdate unaccent extension for parallel query.
Robert Haas [Tue, 14 Jun 2016 18:55:49 +0000 (14:55 -0400)]
Update unaccent extension for parallel query.

All functions provided by this extension are PARALLEL SAFE.

Andreas Karlsson

8 years agoUpdate sslinfo extension for parallel query.
Robert Haas [Tue, 14 Jun 2016 18:52:55 +0000 (14:52 -0400)]
Update sslinfo extension for parallel query.

All functions provided by this extension are PARALLEL RESTRICTED,
because they provide information about the connection state.  Parallel
workers don't have this information and therefore these functions
can't be executed in a worker (but they can be present in a query some
other part of which uses parallelism).

Andreas Karlsson

8 years agoUpdate extensions with GIN/GIST support for parallel query.
Robert Haas [Tue, 14 Jun 2016 17:34:37 +0000 (13:34 -0400)]
Update extensions with GIN/GIST support for parallel query.

Commit 749a787c5b25ae33b3d4da0ef12aa05214aa73c7 bumped the extension
version on all of these extensions already, and we haven't had a
release since then, so we can make further changes without bumping the
extension version again.  Take this opportunity to mark all of the
functions exported by these modules PARALLEL SAFE -- except for
pg_trgm's set_limit().  Mark that one PARALLEL RESTRICTED, because it
makes a persistent change to a GUC value.

Note that some of the markings added by this commit don't have any
effect; for example, gseg_picksplit() isn't likely to be mentioned
explicitly in a query and therefore it's parallel-safety marking will
never be consulted.  But this commit just marks everything for
consistency: if it were somehow used in a query, that would be fine as
far as parallel query is concerned, since it does not consult any
backend-private state, attempt to write data, etc.

Andreas Karlsson, with a few revisions by me.

8 years agopostgres_fdw: Check PlaceHolderVars before pushing down a join.
Robert Haas [Tue, 14 Jun 2016 15:48:27 +0000 (11:48 -0400)]
postgres_fdw: Check PlaceHolderVars before pushing down a join.

As discovered by Andreas Seltenreich via sqlsmith, it's possible for a
remote join to need to generate a target list which contains a
PlaceHolderVar which would need to be evaluated on the remote server.
This happens when we try to push down a join tree which contains outer
joins and the nullable side of the join contains a subquery which
evauates some expression which can go to NULL above the level of the
join.  Since the deparsing logic can't build a remote query that
involves subqueries, it fails while trying to produce an SQL query
that can be sent to the remote side.  Detect such cases and don't try
to push down the join at all.

It's actually fine to push down the join if the PlaceHolderVar needs
to be evaluated at the current join level.  This patch makes a small
change to build_tlist_to_deparse so that this case will work.

Amit Langote, Ashutosh Bapat, and me.

8 years agoMinor fixes in contrib installation scripts.
Tom Lane [Tue, 14 Jun 2016 14:47:06 +0000 (10:47 -0400)]
Minor fixes in contrib installation scripts.

Extension scripts should never use CREATE OR REPLACE for initial object
creation.  If there is a collision with a pre-existing (probably
user-created) object, we want extension installation to fail, not silently
overwrite the user's object.  Bloom and sslinfo both violated this precept.

Also fix a number of scripts that had no standard header (the file name
comment and the \echo...\quit guard).  Probably the \echo...\quit hack
is less important now than it was in 9.1 days, but that doesn't mean
that individual extensions get to choose whether to use it or not.

And fix a couple of evident copy-and-pasteos in file name comments.

No need for back-patch: the REPLACE bugs are both new in 9.6, and the
rest of this is pretty much cosmetic.

Andreas Karlsson and Tom Lane

8 years agopostgres_fdw: Promote an Assert() to elog().
Robert Haas [Tue, 14 Jun 2016 12:55:50 +0000 (08:55 -0400)]
postgres_fdw: Promote an Assert() to elog().

Andreas Seltenreich reports that it is possible for a PlaceHolderVar
to creep into this tlist, and I fear that even after that's fixed we
might have other, similar bugs in this area either now or in the
future.  There's a lot of action-at-a-distance here, because the
validity of this assertion depends on core planner behavior; so, let's
use elog() to make sure we catch this even in non-assert builds,
rather than just crashing.

8 years agoFix multiple minor infelicities in aclchk.c error reports.
Tom Lane [Mon, 13 Jun 2016 17:53:10 +0000 (13:53 -0400)]
Fix multiple minor infelicities in aclchk.c error reports.

pg_type_aclmask reported the wrong type's OID when complaining that
it could not find a type's typelem.  It also failed to provide a
suitable errcode when the initially given OID doesn't exist (which
is a user-facing error, since that OID can be user-specified).
pg_foreign_data_wrapper_aclmask and pg_foreign_server_aclmask likewise
lacked errcode specifications.  Trivial cosmetic adjustments too.

The wrong-type-OID problem was reported by Petru-Florin Mihancea in
bug #14186; the other issues noted by me while reading the code.
These errors all seem to be aboriginal in the respective routines, so
back-patch as necessary.

Report: <20160613163159.5798.52928@wrigleys.postgresql.org>

8 years agoIn planner.c, avoid assuming that all PathTargets have sortgrouprefs.
Tom Lane [Mon, 13 Jun 2016 16:59:25 +0000 (12:59 -0400)]
In planner.c, avoid assuming that all PathTargets have sortgrouprefs.

The struct definition for PathTarget specifies that a NULL sortgrouprefs
pointer means no sortgroupref labels.  While it's likely that there
should always be at least one labeled column in the places that were
unconditionally fetching through the pointer, it seems wiser to adhere to
the data structure specification and test first.  Add a macro to make this
convenient.  Per experimentation with running the regression tests with a
very small parallelization threshold --- the crash I observed may well
represent a bug elsewhere, but still this coding was not very robust.

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

8 years agoRemove extraneous leading whitespace in Windows build script.
Tom Lane [Mon, 13 Jun 2016 15:50:27 +0000 (11:50 -0400)]
Remove extraneous leading whitespace in Windows build script.

Apparently, at least some versions of Microsoft's shell fail on variable
assignments that have leading whitespace.  This instance, introduced in
commit 680513ab7, managed to escape notice for awhile because it's only
invoked if building with OpenSSL.  Per bug #14185 from Torben Dannhauer.

Report: <20160613140119.5798.78501@wrigleys.postgresql.org>

8 years agoFinish pgindent run for 9.6: Perl files.
Noah Misch [Sun, 12 Jun 2016 08:19:56 +0000 (04:19 -0400)]
Finish pgindent run for 9.6: Perl files.

8 years agoDocument the authoritative version of perltidy.
Noah Misch [Sun, 12 Jun 2016 08:19:44 +0000 (04:19 -0400)]
Document the authoritative version of perltidy.

Every whole-tree perltidy run has used this version, firmly establishing
it as the de facto standard.

8 years agoPL/Python: Rename new keyword arguments of plpy.error() etc.
Peter Eisentraut [Sat, 11 Jun 2016 23:27:49 +0000 (19:27 -0400)]
PL/Python: Rename new keyword arguments of plpy.error() etc.

Rename schema -> schema_name etc. to remain consistent with C API and
PL/pgSQL.

8 years agoChange default of backend_flush_after GUC to 0 (disabled).
Andres Freund [Fri, 10 Jun 2016 22:31:11 +0000 (15:31 -0700)]
Change default of backend_flush_after GUC to 0 (disabled).

While beneficial, both for throughput and average/worst case latency, in
a significant number of workloads, there are other workloads in which
backend_flush_after can cause significant performance regressions in
comparison to < 9.6 releases. The regression is most likely when the hot
data set is bigger than shared buffers, but significantly smaller than
the operating system's page cache.

I personally think that the benefit of enabling backend flush control is
considerably bigger than the potential downsides, but a fair argument
can be made that not regressing is more important than improving
performance/latency. As the latter is the consensus, change the default
to 0.

The other settings introduced in 428b1d6b2 do not have the same
potential for regressions, so leave them enabled.

Benchmarks leading up to changing the default have been performed by
Mithun Cy, Ashutosh Sharma and Robert Haas.

Discussion: CAD__OuhPmc6XH=wYRm_+Q657yQE88DakN4=Ybh2oveFasHkoeA@mail.gmail.com

8 years agoRemove reltarget_has_non_vars flag.
Tom Lane [Fri, 10 Jun 2016 20:20:03 +0000 (16:20 -0400)]
Remove reltarget_has_non_vars flag.

Commit b12fd41c6 added a "reltarget_has_non_vars" field to RelOptInfo,
but failed to maintain it accurately.  Since its only purpose was to skip
calls to has_parallel_hazard() in the simple case where a rel's targetlist
is all Vars, and that call is really pretty cheap in that case anyway, it
seems like this is just a case of premature optimization.  Let's drop the
flag and do the calls unconditionally until it's proven that we need more
smarts here.

8 years agoRefactor to reduce code duplication for function property checking.
Tom Lane [Fri, 10 Jun 2016 20:03:37 +0000 (16:03 -0400)]
Refactor to reduce code duplication for function property checking.

As noted by Andres Freund, we'd accumulated quite a few similar functions
in clauses.c that examine all functions in an expression tree to see if
they satisfy some boolean test.  Reduce the duplication by inventing a
function check_functions_in_node() that applies a simple callback function
to each SQL function OID appearing in a given expression node.  This also
fixes some arguable oversights; for example, contain_mutable_functions()
did not check aggregate or window functions for mutability.  I doubt that
that represents a live bug at the moment, because we don't really consider
mutability for aggregates; but it might someday be one.

I chose to put check_functions_in_node() in nodeFuncs.c because it seemed
like other modules might wish to use it in future.  That in turn forced
moving set_opfuncid() et al into nodeFuncs.c, as the alternative was for
nodeFuncs.c to depend on optimizer/setrefs.c which didn't seem very clean.

In passing, teach contain_leaked_vars_walker() about a few more expression
node types it can safely look through, and improve the rather messy and
undercommented code in has_parallel_hazard_walker().

Discussion: <20160527185853.ziol2os2zskahl7v@alap3.anarazel.de>

8 years agoRename local variable for consistency.
Kevin Grittner [Fri, 10 Jun 2016 16:24:01 +0000 (11:24 -0500)]
Rename local variable for consistency.

Pointed out by Robert Haas.

8 years agoUpdate pgstattuple extension for parallel query.
Robert Haas [Fri, 10 Jun 2016 14:42:03 +0000 (10:42 -0400)]
Update pgstattuple extension for parallel query.

All functions provided by this extension are PARALLEL SAFE.

Andreas Karlsson

8 years agoUpdate pg_stat_statements extension for parallel query.
Robert Haas [Fri, 10 Jun 2016 14:42:01 +0000 (10:42 -0400)]
Update pg_stat_statements extension for parallel query.

All functions provided by this extension are PARALLEL SAFE.  Given the
general prohibition against write operations in parallel queries, it is
perhaps a bit surprising that pg_stat_statements_reset() is parallel safe.
But since it only modifies shared memory, not the database, it's OK.

Andreas Karlsson

8 years agoSchema-qualify some references to regprocedure.
Robert Haas [Fri, 10 Jun 2016 14:41:58 +0000 (10:41 -0400)]
Schema-qualify some references to regprocedure.

Andreas Karlsson, per a gripe from Tom Lane.

8 years agoFix interaction between CREATE INDEX and "snapshot too old".
Kevin Grittner [Fri, 10 Jun 2016 14:25:31 +0000 (09:25 -0500)]
Fix interaction between CREATE INDEX and "snapshot too old".

Since indexes are created without valid LSNs, an index created
while a snapshot older than old_snapshot_threshold existed could
cause queries to return incorrect results when those old snapshots
were used, if any relevant rows had been subject to early pruning
before the index was built.  Prevent usage of a newly created index
until all such snapshots are released, for relations where this can
happen.

Questions about the interaction of "snapshot too old" with index
creation were initially raised by Andres Freund.

Reviewed by Robert Haas.

8 years agoImprove the situation for parallel query versus temp relations.
Tom Lane [Fri, 10 Jun 2016 00:16:11 +0000 (20:16 -0400)]
Improve the situation for parallel query versus temp relations.

Transmit the leader's temp-namespace state to workers.  This is important
because without it, the workers do not really have the same search path
as the leader.  For example, there is no good reason (and no extant code
either) to prevent a worker from executing a temp function that the
leader created previously; but as things stood it would fail to find the
temp function, and then either fail or execute the wrong function entirely.

We still prohibit a worker from creating a temp namespace on its own.
In effect, a worker can only see the session's temp namespace if the leader
had created it before starting the worker, which seems like the right
semantics.

Also, transmit the leader's BackendId to workers, and arrange for workers
to use that when determining the physical file path of a temp relation
belonging to their session.  While the original intent was to prevent such
accesses entirely, there were a number of holes in that, notably in places
like dbsize.c which assume they can safely access temp rels of other
sessions anyway.  We might as well get this right, as a small down payment
on someday allowing workers to access the leader's temp tables.  (With
this change, directly using "MyBackendId" as a relation or buffer backend
ID is deprecated; you should use BackendIdForTempRelations() instead.
I left a couple of such uses alone though, as they're not going to be
reachable in parallel workers until we do something about localbuf.c.)

Move the thou-shalt-not-access-thy-leader's-temp-tables prohibition down
into localbuf.c, which is where it actually matters, instead of having it
in relation_open().  This amounts to recognizing that access to temp
tables' catalog entries is perfectly safe in a worker, it's only the data
in local buffers that is problematic.

Having done all that, we can get rid of the test in has_parallel_hazard()
that says that use of a temp table's rowtype is unsafe in parallel workers.
That test was unduly expensive, and if we really did need such a
prohibition, that was not even close to being a bulletproof guard for it.
(For example, any user-defined function executed in a parallel worker
might have attempted such access.)

8 years agoRepair a bit of pgindent damage.
Robert Haas [Thu, 9 Jun 2016 22:09:17 +0000 (18:09 -0400)]
Repair a bit of pgindent damage.

Inserting line-breaks into the middle of a URL is, to put it mildly, not
very helpful, so persuade pgindent to leave it alone.

8 years agopgindent run for 9.6
Robert Haas [Thu, 9 Jun 2016 22:02:36 +0000 (18:02 -0400)]
pgindent run for 9.6

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

The pgrowlocks function provided by this extension is PARALLEL SAFE.

Andreas Karlsson

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

The pg_prewarm function provided by this extension is PARALLEL SAFE.

Andreas Karlsson

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

All functions provided by this extension are PARALLEL SAFE.

Andreas Karlsson

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.