1. 17 Apr, 2018 6 commits
  2. 16 Apr, 2018 4 commits
    • Alvaro Herrera's avatar
      Restore partition_prune's usage of parallel workers · 47c91b55
      Alvaro Herrera authored
      This reverts commit 4d0f6d3f ("Attempt to stabilize partition_prune
      test output (2)"), and attempts to stabilize the test by using string
      replacement to hide any loop count difference in parallel nodes.
      
      Discussion: https://postgr.es/m/4475.1523628300@sss.pgh.pa.us
      47c91b55
    • Tom Lane's avatar
      Fix broken collation-aware searches in SP-GiST text opclass. · b15e8f71
      Tom Lane authored
      spg_text_leaf_consistent() supposed that it should compare only
      Min(querylen, entrylen) bytes of the two strings, and then deal with
      any excess bytes in one string or the other by assuming the longer
      string is greater if the prefixes are equal.  Quite aside from the
      fact that that's just wrong in some locales (e.g., 'ch' is not less
      than 'd' in cs_CZ), it also risked passing incomplete multibyte
      characters to strcoll(), with ensuing bad results.
      
      Instead, just pass the full strings to varstr_cmp, and let it decide
      what to do about unequal-length strings.
      
      Fortunately, this error doesn't imply any index corruption, it's just
      that searches might return the wrong set of entries.
      
      Per report from Emre Hasegeli, though this is not his patch.
      Thanks to Peter Geoghegan for review and discussion.
      
      This code was born broken, so back-patch to all supported branches.
      In HEAD, I failed to resist the temptation to do a bit of cosmetic
      cleanup/pgindent'ing on 710d90da, too.
      
      Discussion: https://postgr.es/m/CAE2gYzzb6K51VnTq5i5p52z+j9p2duEa-K1T3RrC_GQEynAKEg@mail.gmail.com
      b15e8f71
    • Alvaro Herrera's avatar
      Update expected output of new test · 22ff2b85
      Alvaro Herrera authored
      Forgot to 'git add' the file after tweaking the test as submitted :-(
      
      Per buildfarm
      22ff2b85
    • Alvaro Herrera's avatar
      Ignore whole-rows in INSERT/CONFLICT with partitioned tables · 158b7bc6
      Alvaro Herrera authored
      We had an Assert() preventing whole-row expressions from being used in
      the SET clause of INSERT ON CONFLICT, but it seems unnecessary, given
      some tests, so remove it.  Add a new test to exercise the case.
      
      Still at ExecInitPartitionInfo, we used map_partition_varattnos (which
      constructs an attribute map, then calls map_variable_attnos) using
      the same two relations many times in different expressions and with
      different parameters.  Constructing the map over and over is a waste.
      To avoid this repeated work, construct the map once, and use
      map_variable_attnos() directly instead.
      
      Author: Amit Langote, per comments by me (Álvaro)
      Discussion: https://postgr.es/m/20180326142016.m4st5e34chrzrknk@alvherre.pgsql
      158b7bc6
  3. 15 Apr, 2018 9 commits
    • Tom Lane's avatar
      Fix potentially-unportable code in contrib/adminpack. · 3a2d6365
      Tom Lane authored
      Spelling access(2)'s second argument as "2" is just horrid.
      POSIX makes no promises as to the numeric values of W_OK and related
      macros.  Even if it accidentally works as intended on every supported
      platform, it's still unreadable and inconsistent with adjacent code.
      
      In passing, don't spell "NULL" as "0" either.  Yes, that's legal C;
      no, it's not project style.
      
      Back-patch, just in case the unportability is real and not theoretical.
      (Most likely, even if a platform had different bit assignments for
      access()'s modes, there'd not be an observable behavior difference
      here; but I'm being paranoid today.)
      3a2d6365
    • Tom Lane's avatar
      Clean up callers of JsonbIteratorNext(). · f8a187bd
      Tom Lane authored
      Coverity complained about the lack of a check on the return value in
      parse_jsonb_index_flags' last call of JsonbIteratorNext.  Seems like
      a reasonable gripe to me, especially since the code is depending on
      that being WJB_DONE to not leak memory, so add a check.
      
      In passing, improve a couple other places where the result was being
      ignored, either by adding an assert or at least a cast to void.
      
      Also, don't spell "WJB_DONE" as "0".  That's horrid coding style,
      and it wasn't consistent either.
      f8a187bd
    • Magnus Hagander's avatar
      Don't attempt to verify checksums on new pages · 33cedf14
      Magnus Hagander authored
      Teach both base backups and pg_verify_checksums that if a page is new,
      it does not have a checksum yet, so it shouldn't be verified.
      
      Noted by Tomas Vondra, review by David Steele.
      33cedf14
    • Magnus Hagander's avatar
      Fix build of pg_verify_checksum docs · 90372729
      Magnus Hagander authored
      They were accidentally excluded when reverting the backend online
      checksum functionality, and since they weren't built the incorrect
      reference to a removed section also did not trigger a problem.
      
      Author: Christoph Berg
      90372729
    • Magnus Hagander's avatar
      Clarify pg_verify_checksum documentation · 64538792
      Magnus Hagander authored
      Make it clear that a cluster has to be shut down cleanly before
      pg_verify_checksum can be run against it.
      
      Author: Michael Paquier
      Review: Daniel Gustafsson
      64538792
    • Magnus Hagander's avatar
      Remove -f option from pg_verify_checksums · 44e2df46
      Magnus Hagander authored
      This option makes no sense when the cluster checksum state cannot be
      changed, and should have been removed in the revert.
      
      Author: Daniel Gustafsson
      Review: Michael Paquier
      44e2df46
    • Tom Lane's avatar
      Simplify view-expansion code in rewriteHandler.c. · 49ac4039
      Tom Lane authored
      In the wake of commit 50c6bb02, it's not necessary for ApplyRetrieveRule
      to have a forUpdatePushedDown parameter.  By the time control gets here for
      any given view-referencing RTE, we should already have pushed down the
      effects of any FOR UPDATE/SHARE clauses affecting the view from outer query
      levels.  Hence if we don't find a RowMarkClause at the current query level,
      that's sufficient proof that there is no outer one either.  This in turn
      means we need no forUpdatePushedDown parameter for fireRIRrules.
      
      I wonder whether we oughtn't also revert commit cba2d271, since it now
      seems likely that that was band-aiding around the bad effects of doing
      FOR UPDATE pushdown and view expansion in the wrong order.  However,
      in the absence of evidence that the current coding of markQueryForLocking
      is actually buggy (i.e. missing RTEs it ought to mark), it seems best to
      leave it alone.
      
      Discussion: https://postgr.es/m/24db7b8f-3de5-e25f-7ab9-d8848351d42c@gmail.com
      49ac4039
    • Alvaro Herrera's avatar
      List src/include/partitioning in src/include/Makefile · 4d64abc2
      Alvaro Herrera authored
      This omission prevented partitioning header files from being installed.
      
      Per buildfarm member crake.
      4d64abc2
    • Alvaro Herrera's avatar
      Reorganize partitioning code · da6f3e45
      Alvaro Herrera authored
      There's been a massive addition of partitioning code in PostgreSQL 11,
      with little oversight on its placement, resulting in a
      catalog/partition.c with poorly defined boundaries and responsibilities.
      This commit tries to set a couple of distinct modules to separate things
      a little bit.  There are no code changes here, only code movement.
      
      There are three new files:
        src/backend/utils/cache/partcache.c
        src/include/partitioning/partdefs.h
        src/include/utils/partcache.h
      
      The previous arrangement of #including catalog/partition.h almost
      everywhere is no more.
      
      Authors: Amit Langote and Álvaro Herrera
      Discussion: https://postgr.es/m/98e8d509-790a-128c-be7f-e48a5b2d8d97@lab.ntt.co.jp
      	https://postgr.es/m/11aa0c50-316b-18bb-722d-c23814f39059@lab.ntt.co.jp
      	https://postgr.es/m/143ed9a4-6038-76d4-9a55-502035815e68@lab.ntt.co.jp
      	https://postgr.es/m/20180413193503.nynq7bnmgh6vs5vm@alvherre.pgsql
      da6f3e45
  4. 14 Apr, 2018 5 commits
    • Tom Lane's avatar
      Improve regression test coverage of expand_tuple(). · b39fd897
      Tom Lane authored
      I was dissatisfied with the code coverage report for expand_tuple() in the
      wake of commit 7c44c46d: while better than no coverage at all, it was
      still not exercising the core function of inserting out-of-line default
      values, nor was the HeapTuple-output path covered.  So far as I can find,
      the only code path that reaches the latter at present is EvalPlanQual
      fetches for non-locked tables.  Hence, extend eval-plan-qual.spec to
      test cases where out-of-line defaults must be inserted into a tuple
      fetched from a non-locked table.
      
      Discussion: https://postgr.es/m/87woxi24uw.fsf@ansel.ydns.eu
      b39fd897
    • Tom Lane's avatar
      Fix enforcement of SELECT FOR UPDATE permissions with nested views. · 50c6bb02
      Tom Lane authored
      SELECT FOR UPDATE on a view should require UPDATE (as well as SELECT)
      permissions on the view, and then the view's owner needs those same
      permissions against the relations it references, and so on all the way
      down to base tables.  But ApplyRetrieveRule did things in the wrong order,
      resulting in failure to mark intermediate view levels as needing UPDATE
      permission.  Thus for example, if user A creates a table T and an updatable
      view V1 on T, then grants only SELECT permissions on V1 to user B, B could
      create a second view V2 on V1 and then would be allowed to perform SELECT
      FOR UPDATE via V2 (since V1 wouldn't be checked for UPDATE permissions).
      
      To fix, just switch the order of expanding sub-views and marking referenced
      objects as needing UPDATE permission.  I think additional simplifications
      are now possible, but that's distinct from the bug fix proper.
      
      This is certainly a security issue, but the consequences are pretty minor
      (just the ability to lock rows that shouldn't be lockable).  Against that
      we have a small risk of breaking applications that are working as-desired,
      since nested views have behaved this way since such cases worked at all.
      On balance I'm inclined not to back-patch.
      
      Per report from Alexander Lakhin.
      
      Discussion: https://postgr.es/m/24db7b8f-3de5-e25f-7ab9-d8848351d42c@gmail.com
      50c6bb02
    • Tom Lane's avatar
      Add commentary explaining why MaxIndexTuplesPerPage calculation is safe. · 2a67d644
      Tom Lane authored
      MaxIndexTuplesPerPage ignores the fact that btree indexes sometimes
      store tuples with no data payload.  But it also ignores the possibility
      of "special space" on index pages, which offsets that, so that the
      result isn't an underestimate.  This all seems worth documenting, though.
      
      In passing, remove #define MinIndexTupleSize, which was added by
      commit 2c03216d but not used in that commit nor later ones.
      
      Comment text by me; issue noticed by Peter Geoghegan.
      
      Discussion: https://postgr.es/m/CAH2-WzkQmb54Kbx-YHXstRKXcNc+_87jwV3DRb54xcybLR7Oig@mail.gmail.com
      2a67d644
    • Peter Eisentraut's avatar
      Improve code comments · e013288a
      Peter Eisentraut authored
      As of 0c2c81b4, the replication
      parameter in libpq is no longer "deliberately undocumented".
      e013288a
    • Peter Eisentraut's avatar
      Support named and default arguments in CALL · a8677e3f
      Peter Eisentraut authored
      We need to call expand_function_arguments() to expand named and default
      arguments.
      
      In PL/pgSQL, we also need to deal with named and default INOUT arguments
      when receiving the output values into variables.
      
      Author: Pavel Stehule <pavel.stehule@gmail.com>
      a8677e3f
  5. 13 Apr, 2018 5 commits
  6. 12 Apr, 2018 11 commits