1. 23 Apr, 2018 2 commits
  2. 22 Apr, 2018 1 commit
  3. 21 Apr, 2018 2 commits
  4. 20 Apr, 2018 6 commits
    • Tom Lane's avatar
      Test conversion of NaN between float4 and float8. · 55e0e458
      Tom Lane authored
      Results from buildfarm member opossum suggest that this doesn't work
      quite right on that platform.  We've seen issues with NaN support on
      MIPS/NetBSD before ... allegedly they fixed this stuff back in 2010,
      but maybe only for small values of "fixed".
      
      If, in fact, opossum fails this test then I plan to revert it;
      it's mainly for diagnostic purposes rather than something we'd
      necessarily keep long-term.  I think that the failures in window.sql
      could be worked around with some code duplication, but I want to
      verify my theory about the cause first.
      55e0e458
    • Stephen Frost's avatar
      Fix a couple minor typos · a0fefbcb
      Stephen Frost authored
      In commit f0e44751, GetIndexOpClass was renamed to ResolveOpClass, but
      the comment in typecmds.c didn't get the memo.
      
      In objectaddress.c, missing 'of' in a comment.
      
      Both noticed by Vik Fearing, patch is mine though.
      a0fefbcb
    • Tom Lane's avatar
      Don't run fast_default regression test in parallel with other tests. · 676858bc
      Tom Lane authored
      Since it sets up an event trigger that would fire on DDL done by any
      concurrent test script, the original scheduling is just an invitation
      to irreproducible test failures.  (The fact that we found a bug through
      exactly such irreproducible test failures doesn't really change the
      calculus here: this script is a hazard to anything that runs in parallel
      with it today or might be added to that parallel group in future.  No,
      I don't believe that the trigger is protecting itself sufficiently to
      avoid all possible trouble.)
      
      Discussion: https://postgr.es/m/5767.1523995174@sss.pgh.pa.us
      676858bc
    • Tom Lane's avatar
      Fix race conditions when an event trigger is added concurrently with DDL. · b1b71f16
      Tom Lane authored
      EventTriggerTableRewrite crashed if there were table_rewrite triggers
      present, but there had not been when the calling command started.
      
      EventTriggerDDLCommandEnd called ddl_command_end triggers if present,
      even if there had been no such triggers when the calling command started,
      which would lead to a failure in pg_event_trigger_ddl_commands.
      
      In both cases, fix by doing nothing; it's better to wait till the next
      command when things will be properly initialized.
      
      In passing, remove an elog(DEBUG1) call that might have seemed interesting
      four years ago but surely isn't today.
      
      We found this because of intermittent failures in the buildfarm.  Thanks
      to Alvaro Herrera and Andrew Gierth for analysis.
      
      Back-patch to 9.5; some of this code exists before that, but the specific
      hazards we need to guard against don't.
      
      Discussion: https://postgr.es/m/5767.1523995174@sss.pgh.pa.us
      b1b71f16
    • Tom Lane's avatar
    • Tom Lane's avatar
      Change more places to be less trusting of RestrictInfo.is_pushed_down. · c792c7db
      Tom Lane authored
      On further reflection, commit e5d83995 didn't go far enough: pretty much
      everywhere in the planner that examines a clause's is_pushed_down flag
      ought to be changed to use the more complicated behavior where we also
      check the clause's required_relids.  Otherwise we could make incorrect
      decisions about whether, say, a clause is safe to use as a hash clause.
      
      Some (many?) of these places are safe as-is, either because they are
      never reached while considering a parameterized path, or because there
      are additional checks that would reject a pushed-down clause anyway.
      However, it seems smarter to just code them all the same way rather
      than rely on easily-broken reasoning of that sort.
      
      In support of that, invent a new macro RINFO_IS_PUSHED_DOWN that should
      be used in place of direct tests on the is_pushed_down flag.
      
      Like the previous patch, back-patch to all supported branches.
      
      Discussion: https://postgr.es/m/f8128b11-c5bf-3539-48cd-234178b2314d@proxel.se
      c792c7db
  5. 19 Apr, 2018 10 commits
    • Tom Lane's avatar
      Improve consistency of comments in system catalog headers. · 68c23cba
      Tom Lane authored
      Use the term "system catalog" rather than "system relation" in assorted
      places where it's clearly referring to a table rather than, say, an
      index.  Use more natural word order in the header boilerplate, improve
      some of the one-liner catalog descriptions, and fix assorted random
      deviations from the normal boilerplate.  All purely neatnik-ism, but
      why not.
      
      John Naylor, some additional cleanup by me
      
      Discussion: https://postgr.es/m/CAJVSVGUeJmFB3h-NJ18P32NPa+kzC165nm7GSoGHfPaN80Wxcw@mail.gmail.com
      68c23cba
    • Tom Lane's avatar
      Fix incorrect handling of join clauses pushed into parameterized paths. · e5d83995
      Tom Lane authored
      In some cases a clause attached to an outer join can be pushed down into
      the outer join's RHS even though the clause is not degenerate --- this
      can happen if we choose to make a parameterized path for the RHS.  If
      the clause ends up attached to a lower outer join, we'd misclassify it
      as being a "join filter" not a plain "filter" condition at that node,
      leading to wrong query results.
      
      To fix, teach extract_actual_join_clauses to examine each join clause's
      required_relids, not just its is_pushed_down flag.  (The latter now
      seems vestigial, or at least in need of rethinking, but we won't do
      anything so invasive as redefining it in a bug-fix patch.)
      
      This has been wrong since we introduced parameterized paths in 9.2,
      though it's evidently hard to hit given the lack of previous reports.
      The test case used here involves a lateral function call, and I think
      that a lateral reference may be required to get the planner to select
      a broken plan; though I wouldn't swear to that.  In any case, even if
      LATERAL is needed to trigger the bug, it still affects all supported
      branches, so back-patch to all.
      
      Per report from Andreas Karlsson.  Thanks to Andrew Gierth for
      preliminary investigation.
      
      Discussion: https://postgr.es/m/f8128b11-c5bf-3539-48cd-234178b2314d@proxel.se
      e5d83995
    • Alvaro Herrera's avatar
      Remove quick path in ExecInitPartitionInfo for equal tupdescs · 79b2e526
      Alvaro Herrera authored
      I added this "optimization" on top of Amit Langote's 158b7bc6, but
      the quick path is never taken because the partition uses a different
      pg_type oid than its parent table (causing equalTupleDescs to return
      false).  Changing that requires more analysis and is too considered
      dangerous at this point in the cycle, so revert it.
      
      We might make it work someday, but not for pg11.
      
      Discussion: https://postgr.es/m/825031be-942c-8c24-6163-13c27f217a3d@lab.ntt.co.jp
      79b2e526
    • Alvaro Herrera's avatar
      Plural of modulus is moduli · 2d625176
      Alvaro Herrera authored
      2d625176
    • Alvaro Herrera's avatar
      Rework code to determine partition pruning procedure · e5dcbb88
      Alvaro Herrera authored
      Amit Langote reported that partition prune was unable to work with
      arrays, enums, etc, which led him to research the appropriate way to
      match query clauses to partition keys: instead of searching for an exact
      match of the expression's type, it is better to rely on the fact that
      the expression qual has already been resolved to a specific operator,
      and that the partition key is linked to a specific operator family.
      With that info, it's possible to figure out the strategy and comparison
      function to use for the pruning clause in a manner that works reliably
      for pseudo-types also.
      
      Include new test cases that demonstrate pruning where pseudotypes are
      involved.
      
      Author: Amit Langote, Álvaro Herrera
      Discussion: https://postgr.es/m/2b02f1e9-9812-9c41-972d-517bdc0f815d@lab.ntt.co.jp
      e5dcbb88
    • Alvaro Herrera's avatar
      Enlarge find_other_exec's meager fgets buffer · cea5f9aa
      Alvaro Herrera authored
      The buffer was 100 bytes long, which is barely sufficient when the
      version string gets longer (such as by configure --with-extra-version).
      Set it to MAXPGPATH.
      
      Author: Nikhil Sontakke
      Discussion: https://postgr.es/m/CAMGcDxfLfpYU_Jru++L6ARPCOyxr0W+2O3Q54TDi5XdYeU36ow@mail.gmail.com
      cea5f9aa
    • Teodor Sigaev's avatar
      Fix datatype for number of heap tuples during last cleanup · ff494304
      Teodor Sigaev authored
      It appears that new fields introduced in 857f9c36 have inconsistent datatypes:
      BTMetaPageData.btm_last_cleanup_num_heap_tuples is of float4 type,
      while xl_btree_metadata.last_cleanup_num_heap_tuples is of double type.
      IndexVacuumInfo.num_heap_tuples, which is a source of values for
      both former fields is of double type.  So, make both those fields in
      BTMetaPageData and xl_btree_metadata use float8 type in order to match the
      precision of the source.  That shouldn't be double type, because we always
      use types with explicit width in WAL.
      
      Patch introduces incompatibility of on-disk format since 857f9c36 commit, but
      that versions never was released, so just bump catalog version to avoid
      possible confusion.
      
      Author: Alexander Korortkov
      ff494304
    • Teodor Sigaev's avatar
      Adjust _bt_insertonpg() comments · f97f0c92
      Teodor Sigaev authored
      Remove an obsolete reference to the 'afteritem' argument, which was
      removed by commit bc292937.  Add a comment that clarifies how
      _bt_insertonpg() indirectly handles the insertion of high key items.
      
      Author: Peter Geoghegan
      f97f0c92
    • Teodor Sigaev's avatar
      Handle XLOG_BTREE_META_CLEANUP in btree_desc() and btree_identify() · 3d927961
      Teodor Sigaev authored
      New WAL record XLOG_BTREE_META_CLEANUP introduced in 857f9c36 has no handling
      in btree_desc() and btree_identify().  This patch implements corresponding
      handling.
      
      Alexander Korotkov
      3d927961
    • Teodor Sigaev's avatar
      Adjust INCLUDE index truncation comments and code. · 075aade4
      Teodor Sigaev authored
      Add several assertions that ensure that we're dealing with a pivot tuple
      without non-key attributes where that's expected.  Also, remove the
      assertion within _bt_isequal(), restoring the v10 function signature.  A
      similar check will be performed for the page highkey within
      _bt_moveright() in most cases.  Also avoid dropping all objects within
      regression tests, to increase pg_dump test coverage for INCLUDE indexes.
      
      Rather than using infrastructure that's generally intended to be used
      with reference counted heap tuple descriptors during truncation, use the
      same function that was introduced to store flat TupleDescs in shared
      memory (we use a temp palloc'd buffer).  This isn't strictly necessary,
      but seems more future-proof than the old approach.  It also lets us
      avoid including rel.h within indextuple.c, which was arguably a
      modularity violation.  Also, we now call index_deform_tuple() with the
      truncated TupleDesc, not the source TupleDesc, since that's more robust,
      and saves a few cycles.
      
      In passing, fix a memory leak by pfree'ing truncated pivot tuple memory
      during CREATE INDEX.  Also pfree during a page split, just to be
      consistent.
      
      Refactor _bt_check_natts() to be more readable.
      
      Author: Peter Geoghegan with some editorization by me
      Reviewed by: Alexander Korotkov, Teodor Sigaev
      Discussion: https://www.postgresql.org/message-id/CAH2-Wz%3DkCWuXeMrBCopC-tFs3FbiVxQNjjgNKdG2sHxZ5k2y3w%40mail.gmail.com
      075aade4
  6. 18 Apr, 2018 3 commits
  7. 17 Apr, 2018 8 commits
    • Tom Lane's avatar
      Rationalize handling of single and double quotes in bootstrap data. · 55d26ff6
      Tom Lane authored
      Change things around so that proper quoting of values interpolated into
      the BKI data by initdb is the responsibility of initdb, not something
      we half-heartedly handle by putting double quotes into the raw BKI data.
      (Note: experimentation shows that it still doesn't work to put a double
      quote into the initial superuser username, but that's the fault of
      inadequate quoting while interpolating the name into SQL scripts;
      the BKI aspect of it works fine now.)
      
      Having done that, we can remove the special-case handling of values
      that look like "something" from genbki.pl, and instead teach it to
      escape double --- and single --- quotes properly.  This removes the
      nowhere-documented need to treat those specially in the BKI source
      data; whatever you write will be passed through unchanged into the
      inserted data value, modulo Perl's rules about single-quoted strings.
      
      Add documentation explaining the (pre-existing) handling of backslashes
      in the BKI data.
      
      Per an earlier discussion with John Naylor.
      
      Discussion: https://postgr.es/m/CAJVSVGUNao=-Q2-vAN3PYcdF5tnL5JAHwGwzZGuYHtq+Mk_9ng@mail.gmail.com
      55d26ff6
    • Tom Lane's avatar
      Rationalize handling of array type names in bootstrap data. · 9ffcccdb
      Tom Lane authored
      Formerly, Catalog.pm turned a C array type declaration in the catalog
      header files into a SQL type, e.g., 'foo[]'.  Along the way, genbki.pl
      turned this into '_foo' for the purpose of type lookups, but wrote 'foo[]'
      to postgres.bki.  During bootstrap, bootscanner.l had to have a special
      case rule to tokenize this, and then MapArrayTypeName() would turn 'foo[]'
      into '_foo' one more time.
      
      This seems unnecessarily complicated, especially since nobody cares that
      much about the readability of postgres.bki.  Instead, make Catalog.pm
      convert the C declaration into '_foo' to start with, and preserve that
      representation of the type name throughout bootstrap data processing.
      Then rip out the special-case code in bootscanner.l and bootstrap.c.
      
      This changes postgres.bki to the extent that array fields are now
      declared like
        proconfig = _text ,
      rather than
        proconfig = text[] ,
      
      No documentation update, since the SGML docs didn't mention any of this
      in the first place, and it's all pretty transparent to writers of
      catalog header files anyway.
      
      John Naylor
      
      Discussion: https://postgr.es/m/CAJVSVGUNao=-Q2-vAN3PYcdF5tnL5JAHwGwzZGuYHtq+Mk_9ng@mail.gmail.com
      9ffcccdb
    • Tom Lane's avatar
      Simplify genbki.pl's data quoting rules. · e90d4ddc
      Tom Lane authored
      During the bootstrap data format conversion, it seemed important for
      verifiability's sake that the generated postgres.bki file stayed the same
      as before.  That resulted in adding a bunch of ad-hoc rules about when to
      quote emitted data values, to match previous manual decisions that had
      often quoted values unnecessarily.  Now that the conversion is complete,
      it seems fine to remove all those ad-hoc rules.  The net actual effect on
      the current contents of postgres.bki is that some fields that had been
      quoted despite containing only digits or only "-" lose their unnecessary
      quotes.
      
      Also, now that genbki.pl will always quote values containing a backslash,
      there's no need for bootscanner.l to allow unquoted octal escapes;
      so simplify its production for "id" by removing that possibility.
      
      John Naylor, slightly modified by me
      
      Discussion: https://postgr.es/m/CAJVSVGUNao=-Q2-vAN3PYcdF5tnL5JAHwGwzZGuYHtq+Mk_9ng@mail.gmail.com
      e90d4ddc
    • Heikki Linnakangas's avatar
      Fix confusion on the padding of GIDs in on commit and abort records. · cf5a1890
      Heikki Linnakangas authored
      Review of commit 1eb6d652: It's pointless to add padding to the GID fields,
      when the code that follows assumes that there is no alignment, and uses
      memcpy(). Remove the pointless padding.
      
      Update comments to note the new fields in the WAL records.
      
      Reviewed-by: Michael Paquier
      Discussion: https://www.postgresql.org/message-id/33b787bf-dc20-1161-54e9-3f3b607bf59d%40iki.fi
      cf5a1890
    • Alvaro Herrera's avatar
      Update Append's idea of first_partial_plan · b7e2cbc5
      Alvaro Herrera authored
      It turns out that after runtime partition pruning, Append's
      first_partial_plan does not accurately represent partial plans to run,
      if any of those got pruned.  This could limit participation of workers
      in some partial subplans, if other subplans got pruned.  Fix it by
      keeping an index of the first valid partial subplan in the state node,
      determined at execnode Init time.
      
      Author: David Rowley, with cosmetic changes by me.
      Discussion: https://postgr.es/m/CAKJS1f8o2Yd=rOP=Et3A0FWgF+gSAOkFSU6eNhnGzTPV7nN8sQ@mail.gmail.com
      b7e2cbc5
    • Heikki Linnakangas's avatar
    • Alvaro Herrera's avatar
      Improve coverage of nodeAppend runtime partition prune · 95cdc77b
      Alvaro Herrera authored
      coverage report indicated that mark_invalid_subplans_as_finished() and
      nearby code was not getting exercised by any tests.  Add a new one which
      has execution-time Params rather than only external Params to fix this.
      
      In passing, David noticed that ab_q6 tests were not actually required to
      have a generic plan. The tests were testing exec Params not external
      Params, so there was no need for the PREPARE.  Remove the PREPARE,
      making these plain queries.  (The new queries are called from
      explain_parallel_append, which may be unnecessary since they don't
      actually have a Parallel Append node, just an Append.  But it doesn't
      seem to hurt anything, either.)
      
      Author: David Rowley
      Discussion: https://postgr.es/m/CAKJS1f--hopb6JBSDY4wiXTS3ZcDp-wparXjTQ1nzNdBa04Fog@mail.gmail.com
      95cdc77b
    • Tatsuo Ishii's avatar
      Add more infinite recursion detection while locking a view. · 03030512
      Tatsuo Ishii authored
      Also add regression test cases for detecting infinite recursion in
      locking view tests.  Some document enhancements. Patch by Yugo Nagata.
      03030512
  8. 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
  9. 15 Apr, 2018 4 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