1. 17 Jun, 2016 10 commits
    • Tom Lane's avatar
      Docs typo fix. · d30d1acf
      Tom Lane authored
      Guillaume Lelarge
      d30d1acf
    • Alvaro Herrera's avatar
      Finish up XLOG_HINT renaming · 1ca4a1b5
      Alvaro Herrera authored
      Commit b8fd1a09 renamed XLOG_HINT to XLOG_FPI, but neglected two
      places.
      
      Backpatch to 9.3, like that commit.
      1ca4a1b5
    • Robert Haas's avatar
      pg_visibility: Add pg_truncate_visibility_map function. · 71d05a2c
      Robert Haas authored
      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.
      71d05a2c
    • Robert Haas's avatar
      Try again to fix the way the scanjoin_target is used with partial paths. · 54f5c515
      Robert Haas authored
      Commit 04ae11f6 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
      54f5c515
    • Robert Haas's avatar
      Add VACUUM (DISABLE_PAGE_SKIPPING) for emergencies. · ede62e56
      Robert Haas authored
      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.
      ede62e56
    • Robert Haas's avatar
      Update dblink extension for parallel query. · 20eb2731
      Robert Haas authored
      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
      20eb2731
    • Robert Haas's avatar
      postgres_fdw: Rephrase comment. · 177c56d6
      Robert Haas authored
      Per gripe from Thomas Munro, who only complained about a more
      localized problem, but I couldn't resist a bit more wordsmithing.
      177c56d6
    • Robert Haas's avatar
      Fix typo. · 9c188a84
      Robert Haas authored
      Thomas Munro
      9c188a84
    • 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 1 commit
    • 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