1. 14 Jun, 2016 6 commits
    • 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
  2. 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
  3. 12 Jun, 2016 2 commits
  4. 11 Jun, 2016 1 commit
  5. 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
  6. 09 Jun, 2016 15 commits
    • Robert Haas's avatar
      Repair a bit of pgindent damage. · 2410a254
      Robert Haas authored
      Inserting line-breaks into the middle of a URL is, to put it mildly, not
      very helpful, so persuade pgindent to leave it alone.
      2410a254
    • Robert Haas's avatar
      pgindent run for 9.6 · 4bc424b9
      Robert Haas authored
      4bc424b9
    • Robert Haas's avatar
      Update pgrowlocks extension for parallel query. · 9164deea
      Robert Haas authored
      The pgrowlocks function provided by this extension is PARALLEL SAFE.
      
      Andreas Karlsson
      9164deea
    • Robert Haas's avatar
      Update pg_prewarm extension for parallel query. · 6b3586ca
      Robert Haas authored
      The pg_prewarm function provided by this extension is PARALLEL SAFE.
      
      Andreas Karlsson
      6b3586ca
    • Robert Haas's avatar
      Update pg_freespacemap extension for parallel query. · 42d4257a
      Robert Haas authored
      All functions provided by this extension are PARALLEL SAFE.
      
      Andreas Karlsson
      42d4257a
    • Robert Haas's avatar
      Update pgcrypto extension for parallel query. · 0dbf3ce0
      Robert Haas authored
      All functions provided by this extension are PARALLEL SAFE.
      
      Andreas Karlsson
      0dbf3ce0
    • Robert Haas's avatar
      Update pg_buffercache extension for parallel query. · 06d7fd6e
      Robert Haas authored
      The pg_buffercache_pages function provided by this extension is
      PARALLEL SAFE.
      
      Andreas Karlsson
      06d7fd6e
    • Robert Haas's avatar
      Update pageinspect extension for parallel query. · e3b607cd
      Robert Haas authored
      All functions provided by this extension are PARALLEL SAFE.
      
      Andreas Karlsson
      e3b607cd
    • Tom Lane's avatar
      Handle contrib's GIN/GIST support function signature changes honestly. · 749a787c
      Tom Lane authored
      In commits 9ff60273 and dbe23289 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
      749a787c
    • Robert Haas's avatar
      Don't generate parallel paths for rels with parallel-restricted outputs. · b12fd41c
      Robert Haas authored
      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.
      b12fd41c
    • Robert Haas's avatar
      Yet again update typedefs.list file in preparation for pgindent run · e7bcd983
      Robert Haas authored
      Because the run was delayed, the file had a chance to get out of date.
      e7bcd983
    • Tom Lane's avatar
      Clarify documentation of ceil/ceiling/floor functions. · 7feb60c1
      Tom Lane authored
      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>
      7feb60c1
    • Tom Lane's avatar
      Mop-up for parallel degree-ectomy. · e4158319
      Tom Lane authored
      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).
      e4158319
    • Robert Haas's avatar
      Eliminate "parallel degree" terminology. · c9ce4a1c
      Robert Haas authored
      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).
      c9ce4a1c
    • Tom Lane's avatar
      Polish the documentation concerning phrase text search. · 6581e930
      Tom Lane authored
      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.
      6581e930
  7. 08 Jun, 2016 2 commits
  8. 07 Jun, 2016 2 commits
    • Alvaro Herrera's avatar
      Make psql_crosstab plans more stable · c588df99
      Alvaro Herrera authored
      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.
      c588df99
    • Alvaro Herrera's avatar
      nls-global.mk: search build dir for source files, too · 736c95ca
      Alvaro Herrera authored
      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.
      736c95ca