1. 17 Jan, 2017 11 commits
  2. 16 Jan, 2017 5 commits
  3. 15 Jan, 2017 1 commit
    • Tom Lane's avatar
      Fix matching of boolean index columns to sort ordering. · 0777f7a2
      Tom Lane authored
      Normally, if we have a WHERE clause like "indexcol = constant",
      the planner will figure out that that index column can be ignored
      when determining whether the index has a desired sort ordering.
      But this failed to work for boolean index columns, because a
      condition like "boolcol = true" is canonicalized to just "boolcol"
      which does not give rise to an EquivalenceClass.  Add a check to
      allow the same type of deduction to be made in this case too.
      
      Per a complaint from Dima Pavlov.  Arguably this is a bug, but given the
      limited impact and the small number of complaints so far, I won't risk
      destabilizing plans in stable branches by back-patching.
      
      Patch by me, reviewed by Michael Paquier
      
      Discussion: https://postgr.es/m/1788.1481605684@sss.pgh.pa.us
      0777f7a2
  4. 14 Jan, 2017 6 commits
    • Tom Lane's avatar
      Teach contrib/pg_stat_statements to handle multi-statement commands better. · 83f2061d
      Tom Lane authored
      Make use of the statement boundary info added by commit ab1f0c82
      to let pg_stat_statements behave more sanely when multiple SQL queries
      are jammed into one query string.  It now records just the relevant
      part of the source string, not the whole thing, for each individual
      query.
      
      Even when no multi-statement strings are involved, users may notice small
      changes in the output: leading and trailing whitespace and semicolons will
      be stripped from statements, which did not happen before.
      
      Also, significantly expand pg_stat_statements' regression test script.
      
      Fabien Coelho, reviewed by Craig Ringer and Kyotaro Horiguchi,
      some mods by me
      
      Discussion: https://postgr.es/m/alpine.DEB.2.20.1612200926310.29821@lancre
      83f2061d
    • Tom Lane's avatar
      Change representation of statement lists, and add statement location info. · ab1f0c82
      Tom Lane authored
      This patch makes several changes that improve the consistency of
      representation of lists of statements.  It's always been the case
      that the output of parse analysis is a list of Query nodes, whatever
      the types of the individual statements in the list.  This patch brings
      similar consistency to the outputs of raw parsing and planning steps:
      
      * The output of raw parsing is now always a list of RawStmt nodes;
      the statement-type-dependent nodes are one level down from that.
      
      * The output of pg_plan_queries() is now always a list of PlannedStmt
      nodes, even for utility statements.  In the case of a utility statement,
      "planning" just consists of wrapping a CMD_UTILITY PlannedStmt around
      the utility node.  This list representation is now used in Portal and
      CachedPlan plan lists, replacing the former convention of intermixing
      PlannedStmts with bare utility-statement nodes.
      
      Now, every list of statements has a consistent head-node type depending
      on how far along it is in processing.  This allows changing many places
      that formerly used generic "Node *" pointers to use a more specific
      pointer type, thus reducing the number of IsA() tests and casts needed,
      as well as improving code clarity.
      
      Also, the post-parse-analysis representation of DECLARE CURSOR is changed
      so that it looks more like EXPLAIN, PREPARE, etc.  That is, the contained
      SELECT remains a child of the DeclareCursorStmt rather than getting flipped
      around to be the other way.  It's now true for both Query and PlannedStmt
      that utilityStmt is non-null if and only if commandType is CMD_UTILITY.
      That allows simplifying a lot of places that were testing both fields.
      (I think some of those were just defensive programming, but in many places,
      it was actually necessary to avoid confusing DECLARE CURSOR with SELECT.)
      
      Because PlannedStmt carries a canSetTag field, we're also able to get rid
      of some ad-hoc rules about how to reconstruct canSetTag for a bare utility
      statement; specifically, the assumption that a utility is canSetTag if and
      only if it's the only one in its list.  While I see no near-term need for
      relaxing that restriction, it's nice to get rid of the ad-hocery.
      
      The API of ProcessUtility() is changed so that what it's passed is the
      wrapper PlannedStmt not just the bare utility statement.  This will affect
      all users of ProcessUtility_hook, but the changes are pretty trivial; see
      the affected contrib modules for examples of the minimum change needed.
      (Most compilers should give pointer-type-mismatch warnings for uncorrected
      code.)
      
      There's also a change in the API of ExplainOneQuery_hook, to pass through
      cursorOptions instead of expecting hook functions to know what to pick.
      This is needed because of the DECLARE CURSOR changes, but really should
      have been done in 9.6; it's unlikely that any extant hook functions
      know about using CURSOR_OPT_PARALLEL_OK.
      
      Finally, teach gram.y to save statement boundary locations in RawStmt
      nodes, and pass those through to Query and PlannedStmt nodes.  This allows
      more intelligent handling of cases where a source query string contains
      multiple statements.  This patch doesn't actually do anything with the
      information, but a follow-on patch will.  (Passing this information through
      cleanly is the true motivation for these changes; while I think this is all
      good cleanup, it's unlikely we'd have bothered without this end goal.)
      
      catversion bump because addition of location fields to struct Query
      affects stored rules.
      
      This patch is by me, but it owes a good deal to Fabien Coelho who did
      a lot of preliminary work on the problem, and also reviewed the patch.
      
      Discussion: https://postgr.es/m/alpine.DEB.2.20.1612200926310.29821@lancre
      ab1f0c82
    • Tom Lane's avatar
      Throw suitable error for COPY TO STDOUT/FROM STDIN in a SQL function. · 75abb955
      Tom Lane authored
      A client copy can't work inside a function because the FE/BE wire protocol
      doesn't support nesting of a COPY operation within query results.  (Maybe
      it could, but the protocol spec doesn't suggest that clients should support
      this, and libpq for one certainly doesn't.)
      
      In most PLs, this prohibition is enforced by spi.c, but SQL functions don't
      use SPI.  A comparison of _SPI_execute_plan() and init_execution_state()
      shows that rejecting client COPY is the only discrepancy in what they
      allow, so there's no other similar bugs.
      
      This is an astonishingly ancient oversight, so back-patch to all supported
      branches.
      
      Report: https://postgr.es/m/BY2PR05MB2309EABA3DEFA0143F50F0D593780@BY2PR05MB2309.namprd05.prod.outlook.com
      75abb955
    • Magnus Hagander's avatar
      Change default values for backup and replication parameters · f6d6d292
      Magnus Hagander authored
      This changes the default values of the following parameters:
      
      wal_level = replica
      max_wal_senders = 10
      max_replication_slots = 10
      
      in order to make it possible to make a backup and set up simple
      replication on the default settings, without requiring a system restart.
      
      Discussion: https://postgr.es/m/CABUevEy4PR_EAvZEzsbF5s+V0eEvw7shJ2t-AUwbHOjT+yRb3A@mail.gmail.com
      
      Reviewed by Peter Eisentraut. Benchmark help from Tomas Vondra.
      f6d6d292
    • Peter Eisentraut's avatar
      pg_ctl: Change default to wait for all actions · 05cd12ed
      Peter Eisentraut authored
      The different actions in pg_ctl had different defaults for -w and -W,
      mostly for historical reasons.  Most users will want the -w behavior, so
      make that the default.
      
      Remove the -w option in most example and test code, so avoid confusion
      and reduce verbosity.  pg_upgrade is not touched, so it can continue to
      work with older installations.
      Reviewed-by: default avatarBeena Emerson <memissemerson@gmail.com>
      Reviewed-by: default avatarRyan Murphy <ryanfmurphy@gmail.com>
      05cd12ed
    • Peter Eisentraut's avatar
      Updates to reflect that pg_ctl stop -m fast is the default · e574f15d
      Peter Eisentraut authored
      Various example and test code used -m fast explicitly, but since it's
      the default, this can be omitted now or should be replaced by a better
      example.
      
      pg_upgrade is not touched, so it can continue to operate with older
      installations.
      e574f15d
  5. 13 Jan, 2017 5 commits
    • Tom Lane's avatar
      Fix some more regression test row-order-instability issues. · 5ad966ab
      Tom Lane authored
      Commit 0563a3a8 just introduced another instance of the same unsafe
      testing methodology that appeared in 2ac3ef7a, which I corrected in
      257d8157.  Robert/Amit, please stop doing that.
      
      Also look through the rest of f0e44751's test cases, and correct some
      other queries with underdetermined ordering of results from the system
      catalogs.  These haven't failed in the buildfarm yet, but I don't
      have any confidence in that staying true.
      
      Per multiple buildfarm members.
      5ad966ab
    • Tom Lane's avatar
      In PL/Tcl tests, don't choke if optional error fields are missing. · 5b29e6b6
      Tom Lane authored
      This fixes a portability issue introduced by commit 961bed02: with a
      compiler that doesn't support PG_FUNCNAME_MACRO, the "funcname" field of
      errorCode won't be provided, leading to a failure of the unset command.
      I added -nocomplain to the unset commands for filename and lineno too, just
      in case, though I know of no platform that wouldn't populate those fields.
      (BTW, -nocomplain is new in Tcl 8.4, but fortunately we dropped support
      for pre-8.4 Tcl some time ago.)
      
      Per buildfarm member pademelon.
      5b29e6b6
    • Peter Eisentraut's avatar
      pg_upgrade: Fix for changed pg_ctl default stop mode · 7f5b043d
      Peter Eisentraut authored
      In 9.5, the default pg_ctl stop mode was changed from "smart" to "fast".
      pg_upgrade still thought the default mode was "smart" and only specified
      the mode when "fast" was asked for.  This results in using "fast" all
      the time.  It's not clear what the effect in practice is, but fix it
      nonetheless to restore the previous behavior.
      7f5b043d
    • Robert Haas's avatar
      Fix a bug in how we generate partition constraints. · 0563a3a8
      Robert Haas authored
      Move the code for doing parent attnos to child attnos mapping for Vars
      in partition constraint expressions to a separate function
      map_partition_varattnos() and call it from the appropriate places.
      Doing it in get_qual_from_partbound(), as is now, would produce wrong
      result in certain multi-level partitioning cases, because it only
      considers the current pair of parent-child relations.  In certain
      multi-level partitioning cases, attnums for the same key attribute(s)
      might differ between various levels causing the same attribute to be
      numbered differently in different instances of the Var corresponding
      to a given attribute.
      
      With this commit, in generate_partition_qual(), we first generate the
      the whole partition constraint (considering all levels of partitioning)
      and then do the mapping, so that Vars in the final expression are
      numbered according the leaf relation (to which it is supposed to apply).
      
      Amit Langote, reviewed by me.
      0563a3a8
    • Robert Haas's avatar
      Fix cardinality estimates for parallel joins. · 0c2070ce
      Robert Haas authored
      For a partial path, the cardinality estimate needs to reflect the
      number of rows we think each worker will see, rather than the total
      number of rows; otherwise, costing will go wrong.  The previous coding
      got this completely wrong for parallel joins.
      
      Unfortunately, this change may destabilize plans for users of 9.6 who
      have enabled parallel query, but since 9.6 is still fairly new I'm
      hoping expectations won't be too settled yet.  Also, this is really a
      brown-paper-bag bug, so leaving it unfixed for the entire lifetime of
      9.6 seems unwise.
      
      Related reports (whose import I initially failed to recognize) by
      Tomas Vondra and Tom Lane.
      
      Discussion: http://postgr.es/m/CA+TgmoaDxZ5z5Kw_oCQoymNxNoVaTCXzPaODcOuao=CzK8dMZw@mail.gmail.com
      0c2070ce
  6. 12 Jan, 2017 4 commits
  7. 11 Jan, 2017 3 commits
    • Stephen Frost's avatar
      pg_restore: Don't allow non-positive number of jobs · e72059f3
      Stephen Frost authored
      pg_restore will currently accept invalid values for the number of
      parallel jobs to run (eg: -1), unlike pg_dump which does check that the
      value provided is reasonable.
      
      Worse, '-1' is actually a valid, independent, parameter (as an alias for
      --single-transaction), leading to potentially completely unexpected
      results from a command line such as:
      
        -> pg_restore -j -1
      
      Where a user would get neither parallel jobs nor a single-transaction.
      
      Add in validity checking of the parallel jobs option, as we already have
      in pg_dump, before we try to open up the archive.  Also move the check
      that we haven't been asked to run more parallel jobs than possible on
      Windows to the same place, so we do all the option validity checking
      before opening the archive.
      
      Back-patch all the way, though for 9.2 we're adding the Windows-specific
      check against MAXIMUM_WAIT_OBJECTS as that check wasn't back-patched
      originally.
      
      Discussion: https://www.postgresql.org/message-id/20170110044815.GC18360%40tamriel.snowman.net
      e72059f3
    • Magnus Hagander's avatar
      Fix some typos in comments · 268f9e3d
      Magnus Hagander authored
      Masahiko Sawada
      268f9e3d
    • Bruce Momjian's avatar
      pg_xlogdump: document --path behavior · 73f8d733
      Bruce Momjian authored
      The previous --path documentation and --help output were wrong in both
      its meaning and the defaults.
      
      Reviewed-by: Michael Paquier
      
      Backpatch-through: 9.6
      73f8d733
  8. 10 Jan, 2017 4 commits
    • Stephen Frost's avatar
      pg_dump: Strict names with no matching schema · abfd0095
      Stephen Frost authored
      When using pg_dump --strict-names and a schema pattern which doesn't
      match any schemas (eg: --schema='nonexistant*'), we were incorrectly
      throwing an error claiming no tables were found when, really, there
      were no schemas found:
      
        -> pg_dump --strict-names --schema='nonexistant*'
        pg_dump: no matching tables were found for pattern "nonexistant*"
      
      Fix that by changing the error message to say 'schemas' instead, since
      that is what we are actually complaining about.
      
      Noticed while testing pg_dump error cases.
      
      Back-patch to 9.6 where --strict-names and this error message were
      introduced.
      abfd0095
    • Alvaro Herrera's avatar
      Fix overflow check in StringInfo; add missing casts · 42f50cb8
      Alvaro Herrera authored
      A few thinkos I introduced in fa2fa995.  Also, amend a similarly
      broken comment.
      
      Report by Daniel Vérité.
      Authors: Daniel Vérité, Álvaro Herrera
      Discussion: https://postgr.es/m/1706e85e-60d2-494e-8a64-9af1e1b2186e@manitou-mail.org
      42f50cb8
    • Robert Haas's avatar
      Improve coding in _hash_addovflpage. · e8984374
      Robert Haas authored
      Instead of relying on the page contents to know whether we have
      advanced from the primary bucket page to an overflow page, track
      that explicitly.
      
      Amit Kapila, per a complaint by me.
      e8984374
    • Stephen Frost's avatar
      Fix invalid-parallel-jobs error message · 2ef6fe9c
      Stephen Frost authored
      Including the program name twice is not helpful:
      
      -> pg_dump -j -1
      pg_dump: pg_dump: invalid number of parallel jobs
      
      Correct by removing the progname from the exit_horribly() call used when
      validating the number of parallel jobs.
      
      Noticed while testing various pg_dump error cases.
      
      Back-patch to 9.3 where parallel pg_dump was added.
      2ef6fe9c
  9. 09 Jan, 2017 1 commit
    • Tom Lane's avatar
      Fix error handling in pltcl_returnnext. · 8c572294
      Tom Lane authored
      We can't throw elog(ERROR) out of a Tcl command procedure; we have
      to catch the error and return TCL_ERROR to the Tcl interpreter.
      pltcl_returnnext failed to meet this requirement, so that errors
      detected by pltcl_build_tuple_result or other functions called here
      led to longjmp'ing out of the Tcl interpreter and thereby leaving it
      in a bad state.  Use the existing subtransaction support to prevent
      that.  Oversight in commit 26abb50c, found more or less accidentally
      by the buildfarm thanks to the tests added in 961bed02.
      
      Report: https://postgr.es/m/30647.1483989734@sss.pgh.pa.us
      8c572294