1. 13 May, 2019 10 commits
  2. 12 May, 2019 3 commits
    • Tom Lane's avatar
      Fix misoptimization of "{1,1}" quantifiers in regular expressions. · 8a29ed05
      Tom Lane authored
      A bounded quantifier with m = n = 1 might be thought a no-op.  But
      according to our documentation (which traces back to Henry Spencer's
      original man page) it still imposes greediness, or non-greediness in the
      case of the non-greedy variant "{1,1}?", on whatever it's attached to.
      
      This turns out not to work though, because parseqatom() optimizes away
      the m = n = 1 case without regard for whether it's supposed to change
      the greediness of the argument RE.
      
      We can fix this by just not applying the optimization when the greediness
      needs to change; the subsequent general cases handle it fine.
      
      The three cases in which we can still apply the optimization are
      (a) no quantifier, or quantifier does not impose a preference;
      (b) atom has no greediness property, implying it cannot match a
      variable amount of text anyway; or
      (c) quantifier's greediness is same as atom's.
      Note that in most cases where one of these applies, we'd have exited
      earlier in the "not a messy case" fast path.  I think it's now only
      possible to get to the optimization when the atom involves capturing
      parentheses or a non-top-level backref.
      
      Back-patch to all supported branches.  I'd ordinarily be hesitant to
      put a subtle behavioral change into back branches, but in this case
      it's very hard to see a reason why somebody would write "{1,1}?" unless
      they're trying to get the documented change-of-greediness behavior.
      
      Discussion: https://postgr.es/m/5bb27a41-350d-37bf-901e-9d26f5592dd0@charter.net
      8a29ed05
    • Noah Misch's avatar
      Fail pgwin32_message_to_UTF16() for SQL_ASCII messages. · d02768dd
      Noah Misch authored
      The function had been interpreting SQL_ASCII messages as UTF8, throwing
      an error when they were invalid UTF8.  The new behavior is consistent
      with pg_do_encoding_conversion().  This affects LOG_DESTINATION_STDERR
      and LOG_DESTINATION_EVENTLOG, which will send untranslated bytes to
      write() and ReportEventA().  On buildfarm member bowerbird, enabling
      log_connections caused an error whenever the role name was not valid
      UTF8.  Back-patch to 9.4 (all supported versions).
      
      Discussion: https://postgr.es/m/20190512015615.GD1124997@rfd.leadboat.com
      d02768dd
    • Tom Lane's avatar
      Rearrange pgstat_bestart() to avoid failures within its critical section. · 85ccb689
      Tom Lane authored
      We long ago decided to design the shared PgBackendStatus data structure to
      minimize the cost of writing status updates, which means that writers just
      have to increment the st_changecount field twice.  That isn't hooked into
      any sort of resource management mechanism, which means that if something
      were to throw error between the two increments, the st_changecount field
      would be left odd indefinitely.  That would cause readers to lock up.
      Now, since it's also a bad idea to leave the field odd for longer than
      absolutely necessary (because readers will spin while we have it set),
      the expectation was that we'd treat these segments like spinlock critical
      sections, with only short, more or less straight-line, code in them.
      
      That was fine as originally designed, but commit 9029f4b3 broke it
      by inserting a significant amount of non-straight-line code into
      pgstat_bestart(), code that is very capable of throwing errors, not to
      mention taking a significant amount of time during which readers will spin.
      We have a report from Neeraj Kumar of readers actually locking up, which
      I suspect was due to an encoding conversion error in X509_NAME_to_cstring,
      though conceivably it was just a garden-variety OOM failure.
      
      Subsequent commits have loaded even more dubious code into pgstat_bestart's
      critical section (and commit fc70a4b0 deserves some kind of booby prize
      for managing to miss the critical section entirely, although the negative
      consequences seem minimal given that the PgBackendStatus entry should be
      seen by readers as inactive at that point).
      
      The right way to fix this mess seems to be to compute all these values
      into a local copy of the process' PgBackendStatus struct, and then just
      copy the data back within the critical section proper.  This plan can't
      be implemented completely cleanly because of the struct's heavy reliance
      on out-of-line strings, which we must initialize separately within the
      critical section.  But still, the critical section is far smaller and
      safer than it was before.
      
      In hopes of forestalling future errors of the same ilk, rename the
      macros for st_changecount management to make it more apparent that
      the writer-side macros create a critical section.  And to prevent
      the worst consequences if we nonetheless manage to mess it up anyway,
      adjust those macros so that they really are a critical section, ie
      they now bump CritSectionCount.  That doesn't add much overhead, and
      it guarantees that if we do somehow throw an error while the counter
      is odd, it will lead to PANIC and a database restart to reset shared
      memory.
      
      Back-patch to 9.5 where the problem was introduced.
      
      In HEAD, also fix an oversight in commit b0b39f72: it failed to teach
      pgstat_read_current_status to copy st_gssstatus data from shared memory to
      local memory.  Hence, subsequent use of that data within the transaction
      would potentially see changing data that it shouldn't see.
      
      Discussion: https://postgr.es/m/CAPR3Wj5Z17=+eeyrn_ZDG3NQGYgMEOY6JV6Y-WRRhGgwc16U3Q@mail.gmail.com
      85ccb689
  3. 11 May, 2019 14 commits
  4. 10 May, 2019 7 commits
  5. 09 May, 2019 6 commits
    • Bruce Momjian's avatar
      doc: more PG 12 release note adjustments · 79697d03
      Bruce Momjian authored
      This adds two more items that should have been included in the
      beginning.
      
      Reported-by: Justin Pryzby
      
      Discussion: https://postgr.es/m/20190508203204.GA25482@telsasoft.com
      79697d03
    • Bruce Momjian's avatar
      docs: update release notes with fixes · 81ddfa2e
      Bruce Momjian authored
      Reported-by: Justin Pryzby
      
      Discussion: https://postgr.es/m/20190508203204.GA25482@telsasoft.com
      81ddfa2e
    • Michael Paquier's avatar
      Improve and fix some error handling for REINDEX INDEX/TABLE CONCURRENTLY · 508300e2
      Michael Paquier authored
      This improves the user experience when it comes to restrict several
      flavors of REINDEX CONCURRENTLY.  First, for INDEX, remove a restriction
      on shared relations as we already check after catalog relations.  Then,
      for TABLE, add a proper error message when attempting to run the command
      on system catalogs.  The code path of CREATE INDEX CONCURRENTLY already
      complains about that, but if a REINDEX is issued then then the error
      generated is confusing.
      
      While on it, add more tests to check restrictions on catalog indexes and
      on toast table/index for catalogs.  Some error messages are improved,
      with wording suggestion coming from Tom Lane.
      
      Reported-by: Tom Lane
      Author: Michael Paquier
      Reviewed-by: Tom Lane
      Discussion: https://postgr.es/m/23694.1556806002@sss.pgh.pa.us
      508300e2
    • Tom Lane's avatar
      Repair issues with faulty generation of merge-append plans. · 24c19e9f
      Tom Lane authored
      create_merge_append_plan failed to honor the CP_EXACT_TLIST flag:
      it would generate the expected targetlist but then it felt free to
      add resjunk sort targets to it.  This demonstrably leads to assertion
      failures in v11 and HEAD, and it's probably just accidental that we
      don't see the same in older branches.  I've not looked into whether
      there would be any real-world consequences in non-assert builds.
      In HEAD, create_append_plan has sprouted the same problem, so fix
      that too (although we do not have any test cases that seem able to
      reach that bug).  This is an oversight in commit 3fc6e2d7 which
      invented the CP_EXACT_TLIST flag, so back-patch to 9.6 where that
      came in.
      
      convert_subquery_pathkeys would create pathkeys for subquery output
      values if they match any EquivalenceClass known in the outer query
      and are available in the subquery's syntactic targetlist.  However,
      the second part of that condition is wrong, because such values might
      not appear in the subquery relation's reltarget list, which would
      mean that they couldn't be accessed above the level of the subquery
      scan.  We must check that they appear in the reltarget list, instead.
      This can lead to dropping knowledge about the subquery's sort
      ordering, but I believe it's okay, because any sort key that the
      outer query actually has any interest in would appear in the
      reltarget list.
      
      This second issue is of very long standing, but right now there's no
      evidence that it causes observable problems before 9.6, so I refrained
      from back-patching further than that.  We can revisit that choice if
      somebody finds a way to make it cause problems in older branches.
      (Developing useful test cases for these issues is really problematic;
      fixing convert_subquery_pathkeys removes the only known way to exhibit
      the create_merge_append_plan bug, and neither of the test cases added
      by this patch causes a problem in all branches, even when considering
      the issues separately.)
      
      The second issue explains bug #15795 from Suresh Kumar R ("could not
      find pathkey item to sort" with nested DISTINCT queries).  I stumbled
      across the first issue while investigating that.
      
      Discussion: https://postgr.es/m/15795-fadb56c8e44ee73c@postgresql.org
      24c19e9f
    • Bruce Momjian's avatar
      doc: update PG 12 release notes, v2 · 64084d68
      Bruce Momjian authored
      Adjustments requested by reviewers.
      
      Reported-by: Amit Kapila, Thomas Munro, Andrew Gierth, Amit Langote, Oleg Bartunov, Michael Paquier, Alvaro Herrera, Tatsuo Ishii
      
      Discussion: https://postgr.es/m/20190506233029.ozwged67i7s4qd6c@momjian.us
      64084d68
    • Etsuro Fujita's avatar
      Doc: Update FDW documentation about GetForeignUpperPaths(). · a0be05ba
      Etsuro Fujita authored
      In commit d50d172e, which added support for LIMIT/OFFSET pushdown in
      postgres_fdw, a new struct was introduced as the extra parameter of
      GetForeignUpperPaths() set for UPPERREL_FINAL, but I forgot to update
      the documentation to mention that.
      
      Author: Etsuro Fujita
      Discussion: https://postgr.es/m/CAPmGK17uSXQDe31oRb-z1nYyT6vVzkstZkA3_Wbq38U92b9BmQ%40mail.gmail.com
      a0be05ba