1. 17 Jun, 2016 2 commits
    • Robert Haas's avatar
      Remove PID from 'parallel worker' context message. · 292794f8
      Robert Haas authored
      Discussion: <bfd204ab-ab1a-792a-b345-0274a09a4b5f@2ndquadrant.com>
      292794f8
    • Robert Haas's avatar
      Attempt to fix broken regression test. · 103512ce
      Robert Haas authored
      In commit 8c1d9d56, 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.
      103512ce
  2. 16 Jun, 2016 7 commits
    • Tom Lane's avatar
      Fix validation of overly-long IPv6 addresses. · 4c56f326
      Tom Lane authored
      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>
      4c56f326
    • Tom Lane's avatar
      Fix fuzzy thinking in ReinitializeParallelDSM(). · bfb93742
      Tom Lane authored
      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.
      bfb93742
    • Tom Lane's avatar
      Invent min_parallel_relation_size GUC to replace a hard-wired constant. · 75be6646
      Tom Lane authored
      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>
      75be6646
    • Alvaro Herrera's avatar
      Reword bogus comment · 3b5a2a88
      Alvaro Herrera authored
      3b5a2a88
    • Tom Lane's avatar
      Avoid crash in "postgres -C guc" for a GUC with a null string value. · 0b0baf26
      Tom Lane authored
      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>
      0b0baf26
    • Alvaro Herrera's avatar
      Remove unused prototype · b000afea
      Alvaro Herrera authored
      Commit 6f56b41a removed function get_pg_database_relfilenode but left
      its prototype in place.  Remove it.
      b000afea
    • Robert Haas's avatar
      Add regression test for 04ae11f6. · 8c1d9d56
      Robert Haas authored
      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.
      8c1d9d56
  3. 15 Jun, 2016 7 commits
    • Tom Lane's avatar
      Use strftime("%c") to format timestamps in psql's \watch command. · 9901d8ac
      Tom Lane authored
      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>
      9901d8ac
    • Robert Haas's avatar
      Fix regression test for force_parallel_mode=on. · 12f86209
      Robert Haas authored
      Commit 14a254fb 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.
      12f86209
    • Robert Haas's avatar
      Add integrity-checking functions to pg_visibility. · e472ce96
      Robert Haas authored
      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.
      e472ce96
    • Robert Haas's avatar
      Fix lazy_scan_heap so that it won't mark pages all-frozen too soon. · 38e9f90a
      Robert Haas authored
      Commit a892234f 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.
      38e9f90a
    • Robert Haas's avatar
      Mark some functions parallel-unsafe. · c7a25c24
      Robert Haas authored
      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
      c7a25c24
    • Tom Lane's avatar
      Force idle_in_transaction_session_timeout off in pg_dump and autovacuum. · 8383486f
      Tom Lane authored
      We disable statement_timeout and lock_timeout during dump and restore, to
      prevent any global settings that might exist from breaking routine backups.
      Commit c6dda1f4 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>
      8383486f
    • Peter Eisentraut's avatar
      PL/Python: Clean up extended error reporting docs and tests · f0688d6e
      Peter Eisentraut authored
      Format the example and test code more to Python style standards.
      Improve whitespace.  Improve documentation formatting.
      f0688d6e
  4. 14 Jun, 2016 9 commits
    • Bruce Momjian's avatar
      document when PREPARE uses generic plans · fab9d1da
      Bruce Momjian authored
      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
      fab9d1da
    • Robert Haas's avatar
      Update xml2 extension for parallel query. · 13e74531
      Robert Haas authored
      All functions provided by this extension are PARALLEL SAFE.
      
      Andreas Karlsson
      13e74531
    • Robert Haas's avatar
      Update uuid-ossp extension for parallel query. · 20f6c3a2
      Robert Haas authored
      All functions provided by this extension are PARALLEL SAFE.
      
      Andreas Karlsson
      20f6c3a2
    • Robert Haas's avatar
      Update unaccent extension for parallel query. · 202ac08c
      Robert Haas authored
      All functions provided by this extension are PARALLEL SAFE.
      
      Andreas Karlsson
      202ac08c
    • Robert Haas's avatar
      Update sslinfo extension for parallel query. · 6b7d11ff
      Robert Haas authored
      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
      6b7d11ff
    • Robert Haas's avatar
      Update extensions with GIN/GIST support for parallel query. · 2910fc82
      Robert Haas authored
      Commit 749a787c 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.
      2910fc82
    • Robert Haas's avatar
      postgres_fdw: Check PlaceHolderVars before pushing down a join. · 131c7e70
      Robert Haas authored
      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.
      131c7e70
    • Tom Lane's avatar
      Minor fixes in contrib installation scripts. · 5484c0a9
      Tom Lane authored
      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
      5484c0a9
    • Robert Haas's avatar
      postgres_fdw: Promote an Assert() to elog(). · 332fdbef
      Robert Haas authored
      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.
      332fdbef
  5. 13 Jun, 2016 3 commits
    • Tom Lane's avatar
      Fix multiple minor infelicities in aclchk.c error reports. · 783cb6e4
      Tom Lane authored
      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>
      783cb6e4
    • Tom Lane's avatar
      In planner.c, avoid assuming that all PathTargets have sortgrouprefs. · 89d53515
      Tom Lane authored
      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>
      89d53515
    • Tom Lane's avatar
      Remove extraneous leading whitespace in Windows build script. · cd9b4f24
      Tom Lane authored
      Apparently, at least some versions of Microsoft's shell fail on variable
      assignments that have leading whitespace.  This instance, introduced in
      commit 680513ab, 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>
      cd9b4f24
  6. 12 Jun, 2016 2 commits
  7. 11 Jun, 2016 1 commit
  8. 10 Jun, 2016 9 commits
    • Andres Freund's avatar
      Change default of backend_flush_after GUC to 0 (disabled). · 4bc0f165
      Andres Freund authored
      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 428b1d6b 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
      4bc0f165
    • Tom Lane's avatar
      Remove reltarget_has_non_vars flag. · 3303ea1a
      Tom Lane authored
      Commit b12fd41c 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.
      3303ea1a
    • Tom Lane's avatar
      Refactor to reduce code duplication for function property checking. · 2f153ddf
      Tom Lane authored
      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>
      2f153ddf
    • Kevin Grittner's avatar
      Rename local variable for consistency. · 13761bcc
      Kevin Grittner authored
      Pointed out by Robert Haas.
      13761bcc
    • Robert Haas's avatar
      Update pgstattuple extension for parallel query. · a8501ba1
      Robert Haas authored
      All functions provided by this extension are PARALLEL SAFE.
      
      Andreas Karlsson
      a8501ba1
    • Robert Haas's avatar
      Update pg_stat_statements extension for parallel query. · 496899cc
      Robert Haas authored
      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
      496899cc
    • Robert Haas's avatar
      Schema-qualify some references to regprocedure. · 3d8fc8c6
      Robert Haas authored
      Andreas Karlsson, per a gripe from Tom Lane.
      3d8fc8c6
    • Kevin Grittner's avatar
      Fix interaction between CREATE INDEX and "snapshot too old". · bf9a60ee
      Kevin Grittner authored
      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.
      bf9a60ee
    • Tom Lane's avatar
      Improve the situation for parallel query versus temp relations. · cae1c788
      Tom Lane authored
      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.)
      cae1c788