1. 29 Feb, 2016 7 commits
    • Alvaro Herrera's avatar
      Fix typos · 10b48522
      Alvaro Herrera authored
      Author: Amit Langote
      10b48522
    • Alvaro Herrera's avatar
      doc: document MANPATH as /usr/local/pgsql/share/man · 1c7c189f
      Alvaro Herrera authored
      The docs were advising to use /usr/local/pgsql/man instead, but that's
      wrong.
      
      Reported-By: Slawomir Sudnik
      Backpatch-To: 9.1
      Bug: #13894
      1c7c189f
    • Alvaro Herrera's avatar
      Make new isolationtester test more stable · 54638f57
      Alvaro Herrera authored
      The original coding of the test was relying too much on the ordering in
      which backends are awakened once an advisory lock which they wait for is
      released.  Change the code so that each backend uses its own advisory
      lock instead, so that the output becomes stable.  Also add a few seconds
      of sleep between lock releases, so that the test isn't broken in
      overloaded buildfarm animals, as suggested by Tom Lane.
      
      Per buildfarm members spoonbill and guaibasaurus.
      
      Discussion: https://www.postgresql.org/message-id/19294.1456551587%40sss.pgh.pa.us
      54638f57
    • Tom Lane's avatar
      Remove useless unary plus. · c110678a
      Tom Lane authored
      It's harmless, but might confuse readers.  Seems to have been introduced
      in 6bc8ef0b.  Back-patch, just to avoid cosmetic cross-branch
      differences.
      
      Amit Langote
      c110678a
    • Tom Lane's avatar
      Fix build under OPTIMIZER_DEBUG. · 05893712
      Tom Lane authored
      In commit 19a54114 I replaced RelOptInfo.width with
      RelOptInfo.reltarget.width, but I missed updating debug_print_rel()
      for that because it's not compiled by default.
      Reported by Salvador Fandino, patch by Michael Paquier.
      05893712
    • Dean Rasheed's avatar
      Fix incorrect varlevelsup in security_barrier_replace_vars(). · 41fedc24
      Dean Rasheed authored
      When converting an RTE with securityQuals into a security barrier
      subquery RTE, ensure that the Vars in the new subquery's targetlist
      all have varlevelsup = 0 so that they correctly refer to the
      underlying base relation being wrapped.
      
      The original code was creating new Vars by copying them from existing
      Vars referencing the base relation found elsewhere in the query, but
      failed to account for the fact that such Vars could come from sublink
      subqueries, and hence have varlevelsup > 0. In practice it looks like
      this could only happen with nested security barrier views, where the
      outer view has a WHERE clause containing a correlated subquery, due to
      the order in which the Vars are processed.
      
      Bug: #13988
      Reported-by: Adam Guthrie
      Backpatch-to: 9.4, where updatable SB views were introduced
      41fedc24
    • Tom Lane's avatar
      Avoid multiple free_struct_lconv() calls on same data. · 907e4dd2
      Tom Lane authored
      A failure partway through PGLC_localeconv() led to a situation where
      the next call would call free_struct_lconv() a second time, leading
      to free() on already-freed strings, typically leading to a core dump.
      Add a flag to remember whether we need to do that.
      
      Per report from Thom Brown.  His example case only provokes the failure
      as far back as 9.4, but nonetheless this code is obviously broken, so
      back-patch to all supported branches.
      907e4dd2
  2. 28 Feb, 2016 1 commit
  3. 27 Feb, 2016 1 commit
  4. 26 Feb, 2016 9 commits
  5. 25 Feb, 2016 4 commits
    • Alvaro Herrera's avatar
      Fix typos · 343f709c
      Alvaro Herrera authored
      Backpatch to: 9.4
      343f709c
    • Robert Haas's avatar
      Enable parallelism for prepared statements and extended query protocol. · 57a6a72b
      Robert Haas authored
      Parallel query can't handle running a query only partially rather than
      to completion.  However, there seems to be no way to run a statement
      prepared via SQL PREPARE other than to completion, so we can enable it
      there without a problem.
      
      The situation is more complicated for the extend query protocol.
      libpq seems to provide no way to send an Execute message with a
      non-zero rowcount, but some other client might.  If that happens, and
      a parallel plan was chosen, we'll execute the parallel plan without
      using any workers, which may be somewhat inefficient but should still
      work.  Hopefully this won't be a problem; users can always set
      max_parallel_degree=0 to avoid choosing parallel plans in the first
      place.
      
      Amit Kapila, reviewed by me.
      57a6a72b
    • Noah Misch's avatar
      Clean the last few TAP suite tmp_check directories. · 25924ac4
      Noah Misch authored
      Back-patch to 9.5, where the suites were introduced.
      25924ac4
    • Noah Misch's avatar
      MSVC: Clean tmp_check directory of pg_controldata test suite. · 41635887
      Noah Misch authored
      Back-patch to 9.4, where the suite was introduced.
      41635887
  6. 22 Feb, 2016 3 commits
    • Tom Lane's avatar
      Create a function to reliably identify which sessions block which others. · 52f5d578
      Tom Lane authored
      This patch introduces "pg_blocking_pids(int) returns int[]", which returns
      the PIDs of any sessions that are blocking the session with the given PID.
      Historically people have obtained such information using a self-join on
      the pg_locks view, but it's unreasonably tedious to do it that way with any
      modicum of correctness, and the addition of parallel queries has pretty
      much broken that approach altogether.  (Given some more columns in the view
      than there are today, you could imagine handling parallel-query cases with
      a 4-way join; but ugh.)
      
      The new function has the following behaviors that are painful or impossible
      to get right via pg_locks:
      
      1. Correctly understands which lock modes block which other ones.
      
      2. In soft-block situations (two processes both waiting for conflicting lock
      modes), only the one that's in front in the wait queue is reported to
      block the other.
      
      3. In parallel-query cases, reports all sessions blocking any member of
      the given PID's lock group, and reports a session by naming its leader
      process's PID, which will be the pg_backend_pid() value visible to
      clients.
      
      The motivation for doing this right now is mostly to fix the isolation
      tests.  Commit 38f8bdca lobotomized
      isolationtester's is-it-waiting query by removing its ability to recognize
      nonconflicting lock modes, as a crude workaround for the inability to
      handle soft-block situations properly.  But even without the lock mode
      tests, the old query was excessively slow, particularly in
      CLOBBER_CACHE_ALWAYS builds; some of our buildfarm animals fail the new
      deadlock-hard test because the deadlock timeout elapses before they can
      probe the waiting status of all eight sessions.  Replacing the pg_locks
      self-join with use of pg_blocking_pids() is not only much more correct, but
      a lot faster: I measure it at about 9X faster in a typical dev build with
      Asserts, and 3X faster in CLOBBER_CACHE_ALWAYS builds.  That should provide
      enough headroom for the slower CLOBBER_CACHE_ALWAYS animals to pass the
      test, without having to lengthen deadlock_timeout yet more and thus slow
      down the test for everyone else.
      52f5d578
    • Tom Lane's avatar
      Remove redundant PGPROC.lockGroupLeaderIdentifier field. · 73bf8715
      Tom Lane authored
      We don't really need this field, because it's either zero or redundant with
      PGPROC.pid.  The use of zero to mark "not a group leader" is not necessary
      since we can just as well test whether lockGroupLeader is NULL.  This does
      not save very much, either as to code or data, but the simplification seems
      worthwhile anyway.
      73bf8715
    • Andres Freund's avatar
      Fix wrong keysize in PrivateRefCountHash creation. · ea56b06c
      Andres Freund authored
      In 4b4b680c I accidentally used sizeof(PrivateRefCountArray) instead of
      sizeof(PrivateRefCountEntry) when creating the refcount overflow
      hashtable. As the former is bigger than the latter, this luckily only
      resulted in a slightly increased memory usage when many buffers are
      pinned in a backend.
      
      Reported-By: Takashi Horikawa
      Discussion: 73FA3881462C614096F815F75628AFCD035A48C3@BPXM01GP.gisp.nec.co.jp
      Backpatch: 9.5, where thew new ref count infrastructure was introduced
      ea56b06c
  7. 21 Feb, 2016 7 commits
    • Tom Lane's avatar
      Docs: make prose discussion match the ordering of Table 9-58. · 64a169d1
      Tom Lane authored
      The "Session Information Functions" table seems to be sorted mostly
      alphabetically (although it's not perfect), which would be all right
      if it didn't lead to some related functions being described in a
      pretty nonintuitive order.  Also, the prose discussions after the table
      were in an order that hardly matched the table at all.  Rearrange to
      make things a bit easier to follow.
      64a169d1
    • Tom Lane's avatar
      Cosmetic improvements in new config_info code. · c7a1c5a6
      Tom Lane authored
      Coverity griped about use of unchecked strcpy() into a local variable.
      There's unlikely to be any actual bug there, since no caller would be
      passing a path longer than MAXPGPATH, but nonetheless use of strlcpy()
      seems preferable.
      
      While at it, get rid of unmaintainable separation between list of
      field names and list of field values in favor of initializing them
      in parallel.  And we might as well declare get_configdata()'s path
      argument as const char *, even though no current caller needs that.
      c7a1c5a6
    • Andrew Dunstan's avatar
      Fix two-argument jsonb_object when called with empty arrays · 94c745eb
      Andrew Dunstan authored
      Some over-eager copy-and-pasting on my part resulted in a nonsense
      result being returned in this case. I have adopted the same pattern for
      handling this case as is used in the one argument form of the function,
      i.e. we just skip over the code that adds values to the object.
      
      Diagnosis and patch from Michael Paquier, although not quite his
      solution.
      
      Fixes bug #13936.
      
      Backpatch to 9.5 where jsonb_object was introduced.
      94c745eb
    • Robert Haas's avatar
      Fix incorrect decision about which lock to take. · 88aca566
      Robert Haas authored
      Spotted by Tom Lane.
      88aca566
    • Robert Haas's avatar
      Cosmetic improvements to group locking. · d91a4a6c
      Robert Haas authored
      Reflow text in lock manager README so that it fits within 80 columns.
      Correct some mistakes.  Expand the README to explain not only why group
      locking exists but also the data structures that support it.  Improve
      comments related to group locking several files.  Change the name of a
      macro argument for improved clarity.
      
      Most of these problems were reported by Tom Lane, but I found a few
      of them myself.
      
      Robert Haas and Tom Lane
      d91a4a6c
    • Robert Haas's avatar
      postgres_fdw: Avoid sharing list substructure. · dd077ef8
      Robert Haas authored
      list_concat(list_concat(a, b), c) destructively changes both a and b;
      to avoid such perils, copy lists of remote_conds before incorporating
      them into larger lists via list_concat().
      
      Ashutosh Bapat, per a report from Etsuro Fujita
      dd077ef8
    • Tatsuo Ishii's avatar
      Fix wording in the Tutorial document. · 902fd1f4
      Tatsuo Ishii authored
      With suggentions from Tom Lane.
      902fd1f4
  8. 20 Feb, 2016 5 commits
  9. 19 Feb, 2016 3 commits
    • Simon Riggs's avatar
      Correct StartupSUBTRANS for page wraparound · 481725c0
      Simon Riggs authored
      StartupSUBTRANS() incorrectly handled cases near the max pageid in the subtrans
      data structure, which in some cases could lead to errors in startup for Hot
      Standby.
      This patch wraps the pageids correctly, avoiding any such errors.
      Identified by exhaustive crash testing by Jeff Janes.
      
      Jeff Janes
      481725c0
    • Peter Eisentraut's avatar
      pg_dump: Fix inconsistent sscanf() conversions · a914a041
      Peter Eisentraut authored
      It was using %u to read a string that was earlier produced by snprintf with %d
      into a signed integer variable.  This seems to work in practice but is
      incorrect.
      
      found by cppcheck
      a914a041
    • Tom Lane's avatar
      Add an explicit representation of the output targetlist to Paths. · 19a54114
      Tom Lane authored
      Up to now, there's been an assumption that all Paths for a given relation
      compute the same output column set (targetlist).  However, there are good
      reasons to remove that assumption.  For example, an indexscan on an
      expression index might be able to return the value of an expensive function
      "for free".  While we have the ability to generate such a plan today in
      simple cases, we don't have a way to model that it's cheaper than a plan
      that computes the function from scratch, nor a way to create such a plan
      in join cases (where the function computation would normally happen at
      the topmost join node).  Also, we need this so that we can have Paths
      representing post-scan/join steps, where the targetlist may well change
      from one step to the next.  Therefore, invent a "struct PathTarget"
      representing the columns we expect a plan step to emit.  It's convenient
      to include the output tuple width and tlist evaluation cost in this struct,
      and there will likely be additional fields in future.
      
      While Path nodes that actually do have custom outputs will need their own
      PathTargets, it will still be true that most Paths for a given relation
      will compute the same tlist.  To reduce the overhead added by this patch,
      keep a "default PathTarget" in RelOptInfo, and allow Paths that compute
      that column set to just point to their parent RelOptInfo's reltarget.
      (In the patch as committed, actually every Path is like that, since we
      do not yet have any cases of custom PathTargets.)
      
      I took this opportunity to provide some more-honest costing of
      PlaceHolderVar evaluation.  Up to now, the assumption that "scan/join
      reltargetlists have cost zero" was applied not only to Vars, where it's
      reasonable, but also PlaceHolderVars where it isn't.  Now, we add the eval
      cost of a PlaceHolderVar's expression to the first plan level where it can
      be computed, by including it in the PathTarget cost field and adding that
      to the cost estimates for Paths.  This isn't perfect yet but it's much
      better than before, and there is a way forward to improve it more.  This
      costing change affects the join order chosen for a couple of the regression
      tests, changing expected row ordering.
      19a54114