1. 24 Aug, 2018 3 commits
    • Andres Freund's avatar
      Introduce minimal C99 usage to verify compiler support. · 143290ef
      Andres Freund authored
      This just converts a few for loops in postgres.c to declare variables
      in the loop initializer, and uses designated initializers in smgr.c's
      definition of smgr callbacks.
      
      Author: Andres Freund
      Discussion: https://postgr.es/m/97d4b165-192d-3605-749c-f614a0c4e783@2ndquadrant.com
      143290ef
    • Andres Freund's avatar
      Require C99 (and thus MSCV 2013 upwards). · d9dd406f
      Andres Freund authored
      In 86d78ef5 I enabled configure to check for C99 support, with the
      goal of checking which platforms support C99.  While there are a few
      machines without C99 support among our buildfarm animals,
      de-supporting them for v12 was deemed acceptable.
      
      While not tested in aforementioned commit, the biggest increase in
      minimum compiler version comes from MSVC, which gained C99 support
      fairly late. The subset in MSVC 2013 is sufficient for our needs, at
      this point. While that is a significant increase in minimum version,
      the existing windows binaries are already built with a new enough
      version.
      
      Make configure error out if C99 support could not be detected. For
      MSVC builds, increase the minimum version to 2013.
      
      The increase to MSVC 2013 allows us to get rid of VCBuildProject.pm,
      as that was only required for MSVC 2005/2008.
      
      Author: Andres Freund
      Discussion: https://postgr.es/m/97d4b165-192d-3605-749c-f614a0c4e783@2ndquadrant.com
      d9dd406f
    • Michael Paquier's avatar
      Add more tests for VACUUM skips with partitioned tables · a569eea6
      Michael Paquier authored
      A VACUUM or ANALYZE command listing directly a partitioned table expands
      it to its partitions, causing all elements of a tree to be processed
      with individual ownership checks done.  This results in different
      relation skips depending on the ownership policy of a tree, which may
      not be consistent for a partition tree.  This commit adds more tests to
      ensure that any future refactoring allows to keep a consistent behavior,
      or at least that any changes done are easily identified and checked.
      The current behavior of VACUUM with partitioned tables is present since
      10.
      
      Author: Nathan Bossart
      Reviewed-by: Michael Paquier
      Discussion: https://postgr.es/m/DC186201-B01F-4A66-9EC4-F855A957C1F9@amazon.com
      a569eea6
  2. 23 Aug, 2018 7 commits
    • Andres Freund's avatar
      Deduplicate code between slot_getallattrs() and slot_getsomeattrs(). · 88ebd62f
      Andres Freund authored
      Code in slot_getallattrs() is the same as if slot_getsomeattrs() is
      called with number of attributes specified in the tuple
      descriptor. Implement it that way instead of duplicating the code
      between those two functions.
      
      This is part of a patchseries abstracting TupleTableSlots so they can
      store arbitrary forms of tuples, but is a nice enough cleanup on its
      own.
      
      Author: Ashutosh Bapat
      Reviewed-By: Andres Freund
      Discussion: https://postgr.es/m/20180220224318.gw4oe5jadhpmcdnm@alap3.anarazel.de
      88ebd62f
    • Andrew Gierth's avatar
      Fix lexing of standard multi-character operators in edge cases. · a40631a9
      Andrew Gierth authored
      Commits c6b3c939 (which fixed the precedence of >=, <=, <> operators)
      and 865f14a2 (which added support for the standard => notation for
      named arguments) created a class of lexer tokens which look like
      multi-character operators but which have their own token IDs distinct
      from Op. However, longest-match rules meant that following any of
      these tokens with another operator character, as in (1<>-1), would
      cause them to be incorrectly returned as Op.
      
      The error here isn't immediately obvious, because the parser would
      usually still find the correct operator via the Op token, but there
      were more subtle problems:
      
      1. If immediately followed by a comment or +-, >= <= <> would be given
         the old precedence of Op rather than the correct new precedence;
      
      2. If followed by a comment, != would be returned as Op rather than as
         NOT_EQUAL, causing it not to be found at all;
      
      3. If followed by a comment or +-, the => token for named arguments
         would be lexed as Op, causing the argument to be mis-parsed as a
         simple expression, usually causing an error.
      
      Fix by explicitly checking for the operators in the {operator} code
      block in addition to all the existing special cases there.
      
      Backpatch to 9.5 where the problem was introduced.
      
      Analysis and patch by me; review by Tom Lane.
      Discussion: https://postgr.es/m/87va851ppl.fsf@news-spur.riddles.org.uk
      a40631a9
    • Andrew Gierth's avatar
      Reduce an unnecessary O(N^3) loop in lexer. · d4a63f82
      Andrew Gierth authored
      The lexer's handling of operators contained an O(N^3) hazard when
      dealing with long strings of + or - characters; it seems hard to
      prevent this case from being O(N^2), but the additional N multiplier
      was not needed.
      
      Backpatch all the way since this has been there since 7.x, and it
      presents at least a mild hazard in that trying to do Bind, PREPARE or
      EXPLAIN on a hostile query could take excessive time (without
      honouring cancels or timeouts) even if the query was never executed.
      d4a63f82
    • Tom Lane's avatar
      In libpq, don't look up all the hostnames at once. · 5ca00774
      Tom Lane authored
      Historically, we looked up the target hostname in connectDBStart, so that
      PQconnectPoll did not need to do DNS name resolution.  The patches that
      added multiple-target-host support to libpq preserved this division of
      labor; but it's really nonsensical now, because it means that if any one
      of the target hosts fails to resolve in DNS, the connection fails.  That
      negates the no-single-point-of-failure goal of the feature.  Additionally,
      DNS lookups aren't exactly cheap, but the code did them all even if the
      first connection attempt succeeds.
      
      Hence, rearrange so that PQconnectPoll does the lookups, and only looks
      up a hostname when it's time to try that host.  This does mean that
      PQconnectPoll could block on a DNS lookup --- but if you wanted to avoid
      that, you should be using hostaddr, as the documentation has always
      specified.  It seems fairly unlikely that any applications would really
      care whether the lookup occurs inside PQconnectStart or PQconnectPoll.
      
      In addition to calling out that fact explicitly, do some other minor
      wordsmithing in the docs around the multiple-target-host feature.
      
      Since this seems like a bug in the multiple-target-host feature,
      backpatch to v10 where that was introduced.  In the back branches,
      avoid moving any existing fields of struct pg_conn, just in case
      any third-party code is looking into that struct.
      
      Tom Lane, reviewed by Fabien Coelho
      
      Discussion: https://postgr.es/m/4913.1533827102@sss.pgh.pa.us
      5ca00774
    • Peter Eisentraut's avatar
      Copy-editing of pg_verify_checksums help and ref page · 2d41d914
      Peter Eisentraut authored
      Reformat synopsis, put options into better order, make the desciption
      line a bit shorter, and put more details into the description.
      2d41d914
    • Peter Eisentraut's avatar
      PL/pgSQL: Extend test case · d2cc897b
      Peter Eisentraut authored
      This test was supposed to check the interaction of INOUT and default
      parameters in a procedure call, but it only checked the case where the
      parameter was not supplied.  Now it also checks the case where the
      parameter was supplied.  It was already working correctly, so no code
      changes required.
      d2cc897b
    • Alvaro Herrera's avatar
      Return type of txid_status is text, not txid_status · d10f7741
      Alvaro Herrera authored
      Thinko in commit 857ee8e3.
      
      Discovered-by: Gianni Ciolli
      d10f7741
  3. 22 Aug, 2018 8 commits
  4. 21 Aug, 2018 5 commits
  5. 20 Aug, 2018 1 commit
  6. 19 Aug, 2018 2 commits
  7. 18 Aug, 2018 2 commits
  8. 17 Aug, 2018 6 commits
    • Tom Lane's avatar
      Ensure schema qualification in pg_restore DISABLE/ENABLE TRIGGER commands. · 6771c932
      Tom Lane authored
      Previously, this code blindly followed the common coding pattern of
      passing PQserverVersion(AH->connection) as the server-version parameter
      of fmtQualifiedId.  That works as long as we have a connection; but in
      pg_restore with text output, we don't.  Instead we got a zero from
      PQserverVersion, which fmtQualifiedId interpreted as "server is too old to
      have schemas", and so the name went unqualified.  That still accidentally
      managed to work in many cases, which is probably why this ancient bug went
      undetected for so long.  It only became obvious in the wake of the changes
      to force dump/restore to execute with restricted search_path.
      
      In HEAD/v11, let's deal with this by ripping out fmtQualifiedId's server-
      version behavioral dependency, and just making it schema-qualify all the
      time.  We no longer support pg_dump from servers old enough to need the
      ability to omit schema name, let alone restoring to them.  (Also, the few
      callers outside pg_dump already didn't work with pre-schema servers.)
      
      In older branches, that's not an acceptable solution, so instead just
      tweak the DISABLE/ENABLE TRIGGER logic to ensure it will schema-qualify
      its output regardless of server version.
      
      Per bug #15338 from Oleg somebody.  Back-patch to all supported branches.
      
      Discussion: https://postgr.es/m/153452458706.1316.5328079417086507743@wrigleys.postgresql.org
      6771c932
    • Peter Eisentraut's avatar
      InsertPgAttributeTuple() to set attcacheoff · e4597ee6
      Peter Eisentraut authored
      InsertPgAttributeTuple() is the interface between in-memory tuple
      descriptors and on-disk pg_attribute, so it makes sense to give it the
      job of resetting attcacheoff.  This avoids having all the callers having
      to do so.
      Reviewed-by: default avatarTom Lane <tgl@sss.pgh.pa.us>
      e4597ee6
    • Andrew Gierth's avatar
      Set scan direction appropriately for SubPlans (bug #15336) · 520acab1
      Andrew Gierth authored
      When executing a SubPlan in an expression, the EState's direction
      field was left alone, resulting in an attempt to execute the subplan
      backwards if it was encountered during a backwards scan of a cursor.
      Also, though much less likely, it was possible to reach the execution
      of an InitPlan while in backwards-scan state.
      
      Repair by saving/restoring estate->es_direction and forcing forward
      scan mode in the relevant places.
      
      Backpatch all the way, since this has been broken since 8.3 (prior to
      commit c7ff7663, SubPlans had their own EStates rather than sharing
      the parent plan's, so there was no confusion over scan direction).
      
      Per bug #15336 reported by Vladimir Baranoff; analysis and patch by
      me, review by Tom Lane.
      
      Discussion: https://postgr.es/m/153449812167.1304.1741624125628126322@wrigleys.postgresql.org
      520acab1
    • Tom Lane's avatar
      Fix configure's snprintf test so it exposes HP-UX bug. · 9bed827b
      Tom Lane authored
      Since commit e1d19c90, buildfarm member gharial has been failing with
      symptoms indicating that snprintf sometimes returns -1 for buffer
      overrun, even though it passes the added configure check.  Some
      google research suggests that this happens only in limited cases,
      such as when the overrun happens partway through a %d item.  Adjust
      the configure check to exercise it that way.  Since I'm now feeling
      more paranoid than I was before, also make the test explicitly verify
      that the buffer doesn't get physically overrun.
      9bed827b
    • Bruce Momjian's avatar
      pg_upgrade: issue helpful error message for use on standbys · b94f7b53
      Bruce Momjian authored
      Commit 777e6ddf checked for a shut down
      message from a standby and allowed it to continue.  This patch reports a
      helpful error message in these cases, suggesting to use rsync as
      documented.
      
      Diagnosed-by: Martín Marqués
      
      Discussion: https://postgr.es/m/CAPdiE1xYCow-reLjrhJ9DqrMu-ppNq0ChUUEvVdxhdjGRD5_eA@mail.gmail.com
      
      Backpatch-through: 9.3
      b94f7b53
    • Michael Paquier's avatar
  9. 16 Aug, 2018 6 commits