1. 19 Jul, 2015 1 commit
  2. 18 Jul, 2015 4 commits
    • Tom Lane's avatar
      Make WaitLatchOrSocket's timeout detection more robust. · 576a95b3
      Tom Lane authored
      In the previous coding, timeout would be noticed and reported only when
      poll() or socket() returned zero (or the equivalent behavior on Windows).
      Ordinarily that should work well enough, but it seems conceivable that we
      could get into a state where poll() always returns a nonzero value --- for
      example, if it is noticing a condition on one of the file descriptors that
      we do not think is reason to exit the loop.  If that happened, we'd be in a
      busy-wait loop that would fail to terminate even when the timeout expires.
      
      We can make this more robust at essentially no cost, by deciding to exit
      of our own accord if we compute a zero or negative time-remaining-to-wait.
      Previously the code noted this but just clamped the time-remaining to zero,
      expecting that we'd detect timeout on the next loop iteration.
      
      Back-patch to 9.2.  While 9.1 had a version of WaitLatchOrSocket, it was
      primitive compared to later versions, and did not guarantee reliable
      detection of timeouts anyway.  (Essentially, this is a refinement of
      commit 3e7fdcff, which was back-patched only as far as 9.2.)
      576a95b3
    • Andrew Dunstan's avatar
      Enable transforms modules to build and test on Cygwin. · 00eff86c
      Andrew Dunstan authored
      This still doesn't work correctly with Python 3, but I am committing
      this so we can get Cygwin buildfarm members building with Python 2.
      00eff86c
    • Andrew Dunstan's avatar
      Release note compatibility item · 47386504
      Andrew Dunstan authored
      Note that json and jsonb extraction operators no longer consider a
      negative subscript to be invalid.
      47386504
    • Andrew Dunstan's avatar
      Support JSON negative array subscripts everywhere · e02d44b8
      Andrew Dunstan authored
      Previously, there was an inconsistency across json/jsonb operators that
      operate on datums containing JSON arrays -- only some operators
      supported negative array count-from-the-end subscripting.  Specifically,
      only a new-to-9.5 jsonb deletion operator had support (the new "jsonb -
      integer" operator).  This inconsistency seemed likely to be
      counter-intuitive to users.  To fix, allow all places where the user can
      supply an integer subscript to accept a negative subscript value,
      including path-orientated operators and functions, as well as other
      extraction operators.  This will need to be called out as an
      incompatibility in the 9.5 release notes, since it's possible that users
      are relying on certain established extraction operators changed here
      yielding NULL in the event of a negative subscript.
      
      For the json type, this requires adding a way of cheaply getting the
      total JSON array element count ahead of time when parsing arrays with a
      negative subscript involved, necessitating an ad-hoc lex and parse.
      This is followed by a "conversion" from a negative subscript to its
      equivalent positive-wise value using the count.  From there on, it's as
      if a positive-wise value was originally provided.
      
      Note that there is still a minor inconsistency here across jsonb
      deletion operators.  Unlike the aforementioned new "-" deletion operator
      that accepts an integer on its right hand side, the new "#-" path
      orientated deletion variant does not throw an error when it appears like
      an array subscript (input that could be recognized by as an integer
      literal) is being used on an object, which is wrong-headed.  The reason
      for not being stricter is that it could be the case that an object pair
      happens to have a key value that looks like an integer; in general,
      these two possibilities are impossible to differentiate with rhs path
      text[] argument elements.  However, we still don't allow the "#-"
      path-orientated deletion operator to perform array-style subscripting.
      Rather, we just return the original left operand value in the event of a
      negative subscript (which seems analogous to how the established
      "jsonb/json #> text[]" path-orientated operator may yield NULL in the
      event of an invalid subscript).
      
      In passing, make SetArrayPath() stricter about not accepting cases where
      there is trailing non-numeric garbage bytes rather than a clean NUL
      byte.  This means, for example, that strings like "10e10" are now not
      accepted as an array subscript of 10 by some new-to-9.5 path-orientated
      jsonb operators (e.g. the new #- operator).  Finally, remove dead code
      for jsonb subscript deletion; arguably, this should have been done in
      commit b81c7b40.
      
      Peter Geoghegan and Andrew Dunstan
      e02d44b8
  3. 17 Jul, 2015 5 commits
    • Tom Lane's avatar
      Repair mishandling of cached cast-expression trees in plpgsql. · 0fc94a5b
      Tom Lane authored
      In commit 1345cc67, I introduced caching
      of expressions representing type-cast operations into plpgsql.  However,
      I supposed that I could cache both the expression trees and the evaluation
      state trees derived from them for the life of the session.  This doesn't
      work, because we execute the expressions in plpgsql's simple_eval_estate,
      which has an ecxt_per_query_memory that is only transaction-lifespan.
      Therefore we can end up putting pointers into the evaluation state tree
      that point to transaction-lifespan memory; in particular this happens if
      the cast expression calls a SQL-language function, as reported by Geoff
      Winkless.
      
      The minimum-risk fix seems to be to treat the state trees the same way
      we do for "simple expression" trees in plpgsql, ie create them in the
      simple_eval_estate's ecxt_per_query_memory, which means recreating them
      once per transaction.
      
      Since I had to introduce bookkeeping overhead for that anyway, I bought
      back some of the added cost by sharing the read-only expression trees
      across all functions in the session, instead of using a per-function
      table as originally.  The simple-expression bookkeeping takes care of
      the recursive-usage risk that I was concerned about avoiding before.
      
      At some point we should take a harder look at how all this works,
      and see if we can't reduce the amount of tree reinitialization needed.
      But that won't happen for 9.5.
      0fc94a5b
    • Tom Lane's avatar
      Fix entirely broken permissions test in new alter_operator regression test. · 266e7714
      Tom Lane authored
      Not only did this test fail to test what it was supposed to test, but it
      left a user definition lying around, which caused subsequent runs of the
      regression tests to fail.
      266e7714
    • Robert Haas's avatar
      Add new function pg_notification_queue_usage. · a04bb65f
      Robert Haas authored
      This tells you what fraction of NOTIFY's queue is currently filled.
      
      Brendan Jurd, reviewed by Merlin Moncure and Gurjeet Singh.  A few
      further tweaks by me.
      a04bb65f
    • Noah Misch's avatar
      AIX: Test the -qlonglong option before use. · 43d89a23
      Noah Misch authored
      xlc provides "long long" unconditionally at C99-compatible language
      levels, and this option provokes a warning.  The warning interferes with
      "configure" tests that fail in response to any warning.  Notably, before
      commit 85a2a890, it interfered with the
      test for -qnoansialias.  Back-patch to 9.0 (all supported versions).
      43d89a23
    • Tom Lane's avatar
      Fix a low-probability crash in our qsort implementation. · 9d6077ab
      Tom Lane authored
      It's standard for quicksort implementations, after having partitioned the
      input into two subgroups, to recurse to process the smaller partition and
      then handle the larger partition by iterating.  This method guarantees
      that no more than log2(N) levels of recursion can be needed.  However,
      Bentley and McIlroy argued that checking to see which partition is smaller
      isn't worth the cycles, and so their code doesn't do that but just always
      recurses on the left partition.  In most cases that's fine; but with
      worst-case input we might need O(N) levels of recursion, and that means
      that qsort could be driven to stack overflow.  Such an overflow seems to
      be the only explanation for today's report from Yiqing Jin of a SIGSEGV
      in med3_tuple while creating an index of a couple billion entries with a
      very large maintenance_work_mem setting.  Therefore, let's spend the few
      additional cycles and lines of code needed to choose the smaller partition
      for recursion.
      
      Also, fix up the qsort code so that it properly uses size_t not int for
      some intermediate values representing numbers of items.  This would only
      be a live risk when sorting more than INT_MAX bytes (in qsort/qsort_arg)
      or tuples (in qsort_tuple), which I believe would never happen with any
      caller in the current core code --- but perhaps it could happen with
      call sites in third-party modules?  In any case, this is trouble waiting
      to happen, and the corrected code is probably if anything shorter and
      faster than before, since it removes sign-extension steps that had to
      happen when converting between int and size_t.
      
      In passing, move a couple of CHECK_FOR_INTERRUPTS() calls so that it's
      not necessary to preserve the value of "r" across them, and prettify
      the output of gen_qsort_tuple.pl a little.
      
      Back-patch to all supported branches.  The odds of hitting this issue
      are probably higher in 9.4 and up than before, due to the new ability
      to allocate sort workspaces exceeding 1GB, but there's no good reason
      to believe that it's impossible to crash older branches this way.
      9d6077ab
  4. 16 Jul, 2015 5 commits
    • Magnus Hagander's avatar
      Fix spelling error · 828df727
      Magnus Hagander authored
      David Rowley
      828df727
    • Magnus Hagander's avatar
      Fix copy/past error in comment · 64c9d8a6
      Magnus Hagander authored
      David Christensen
      64c9d8a6
    • Noah Misch's avatar
      AIX: Link TRANSFORM modules with their dependencies. · 71934367
      Noah Misch authored
      The result closely resembles linking of these modules for the "win32"
      port.  Augment the $(exports_file) header so the file is also usable as
      an import file.  Unfortunately, relocating an AIX installation will now
      require adding $(pkglibdir) to LD_LIBRARY_PATH.  Back-patch to 9.5,
      where the modules were introduced.
      71934367
    • Noah Misch's avatar
      AIX: Link the postgres executable with -Wl,-brtllib. · bcd7c412
      Noah Misch authored
      This allows PostgreSQL modules and their dependencies to have undefined
      symbols, resolved at runtime.  Perl module shared objects rely on that
      in Perl 5.8.0 and later.  This fixes the crash when PL/PerlU loads such
      modules, as the hstore_plperl test suite does.  Module authors can link
      using -Wl,-G to permit undefined symbols; by default, linking will fail
      as it has.  Back-patch to 9.0 (all supported versions).
      bcd7c412
    • Noah Misch's avatar
      MinGW: Link ltree_plpython with plpython. · 736c1f23
      Noah Misch authored
      The MSVC build system already did this, and building against Python 3
      requires it.  Back-patch to 9.5, where the module was introduced.
      736c1f23
  5. 15 Jul, 2015 1 commit
  6. 14 Jul, 2015 7 commits
    • Robert Haas's avatar
      Remove regression test added on auto-pilot. · aa6b2e62
      Robert Haas authored
      Test does not match the comment which precedes it.
      
      Peter Geoghegan
      aa6b2e62
    • Heikki Linnakangas's avatar
      Fix event trigger support for the new ALTER OPERATOR command. · d5c0495c
      Heikki Linnakangas authored
      Also, the lock on pg_operator should not be released until end of
      transaction.
      d5c0495c
    • Heikki Linnakangas's avatar
      Add ALTER OPERATOR command, for changing selectivity estimator functions. · 321eed5f
      Heikki Linnakangas authored
      Other options cannot be changed, as it's not totally clear if cached plans
      would need to be invalidated if one of the other options change. Selectivity
      estimator functions only change plan costs, not correctness of plans, so
      those should be safe.
      
      Original patch by Uriy Zhuravlev, heavily edited by me.
      321eed5f
    • Fujii Masao's avatar
      Prevent pgstattuple() from reporting BRIN as unknown index. · 705d397c
      Fujii Masao authored
      Also this patch removes obsolete comment.
      
      Back-patch to 9.5 where BRIN index was added.
      705d397c
    • Heikki Linnakangas's avatar
      Make regression test output stable. · 1a56498e
      Heikki Linnakangas authored
      In the test query I added for ALTER TABLE retaining comments, the order of
      the result rows was not stable, and varied across systems. Add an ORDER BY
      to make the order predictable. This should fix the buildfarm failures.
      1a56498e
    • Heikki Linnakangas's avatar
      Retain comments on indexes and constraints at ALTER TABLE ... TYPE ... · e42375fc
      Heikki Linnakangas authored
      When a column's datatype is changed, ATExecAlterColumnType() rebuilds all
      the affected indexes and constraints, and the comments from the old
      indexes/constraints were not carried over.
      
      To fix, create a synthetic COMMENT ON command in the work queue, to re-add
      any comments on constraints. For indexes, there's a comment field in
      IndexStmt that is used.
      
      This fixes bug #13126, reported by Kirill Simonov. Original patch by
      Michael Paquier, reviewed by Petr Jelinek and me. This bug is present in
      all versions, but only backpatch to 9.5. Given how minor the issue is, it
      doesn't seem worth the work and risk to backpatch further than that.
      e42375fc
    • Heikki Linnakangas's avatar
      Reformat code in ATPostAlterTypeParse. · 1ab9faae
      Heikki Linnakangas authored
      The code in ATPostAlterTypeParse was very deeply indented, mostly because
      there were two nested switch-case statements, which add a lot of
      indentation. Use if-else blocks instead, to make the code less indented
      and more readable.
      
      This is in preparation for next patch that makes some actualy changes to
      the function. These cosmetic parts have been separated to make it easier
      to see the real changes in the other patch.
      1ab9faae
  7. 12 Jul, 2015 6 commits
  8. 11 Jul, 2015 1 commit
  9. 10 Jul, 2015 1 commit
    • Heikki Linnakangas's avatar
      Copy-edit the docs changes of OWNER TO CURRENT/SESSION_USER additions. · cba045b0
      Heikki Linnakangas authored
      Commit 31eae602 added new syntax to many DDL commands to use CURRENT_USER
      or SESSION_USER instead of role name in ALTER ... OWNER TO, but because
      of a misplaced '{', the syntax in the docs implied that the syntax was
      "ALTER ... CURRENT_USER", instead of "ALTER ... OWNER TO CURRENT_USER".
      Fix that, and also the funny indentation in some of the modified syntax
      blurps.
      cba045b0
  10. 09 Jul, 2015 9 commits
    • Tom Lane's avatar
      Improve documentation about array concat operator vs. underlying functions. · e4f29ce3
      Tom Lane authored
      The documentation implied that there was seldom any reason to use the
      array_append, array_prepend, and array_cat functions directly.  But that's
      not really true, because they can help make it clear which case is meant,
      which the || operator can't do since it's overloaded to represent all three
      cases.  Add some discussion and examples illustrating the potentially
      confusing behavior that can ensue if the parser misinterprets what was
      meant.
      
      Per a complaint from Michael Herold.  Back-patch to 9.2, which is where ||
      started to behave this way.
      e4f29ce3
    • Tom Lane's avatar
      Fix postmaster's handling of a startup-process crash. · 45811be9
      Tom Lane authored
      Ordinarily, a failure (unexpected exit status) of the startup subprocess
      should be considered fatal, so the postmaster should just close up shop
      and quit.  However, if we sent the startup process a SIGQUIT or SIGKILL
      signal, the failure is hardly "unexpected", and we should attempt restart;
      this is necessary for recovery from ordinary backend crashes in hot-standby
      scenarios.  I attempted to implement the latter rule with a two-line patch
      in commit 442231d7, but it now emerges that
      that patch was a few bricks shy of a load: it failed to distinguish the
      case of a signaled startup process from the case where the new startup
      process crashes before reaching database consistency.  That resulted in
      infinitely respawning a new startup process only to have it crash again.
      
      To handle this properly, we really must track whether we have sent the
      *current* startup process a kill signal.  Rather than add yet another
      ad-hoc boolean to the postmaster's state, I chose to unify this with the
      existing RecoveryError flag into an enum tracking the startup process's
      state.  That seems more consistent with the postmaster's general state
      machine design.
      
      Back-patch to 9.0, like the previous patch.
      45811be9
    • Fujii Masao's avatar
      Fix obsolete comment regarding NOTICE message level. · 6ba365aa
      Fujii Masao authored
      By default NOTICE message is not sent to server log because
      the default value of log_min_messages is WARNING since 8.4.
      
      Pavel Stehule
      6ba365aa
    • Fujii Masao's avatar
      Make wal_compression PGC_SUSET rather than PGC_USERSET. · c2e5f4d1
      Fujii Masao authored
      When enabling wal_compression, there is a risk to leak data similarly to
      the BREACH and CRIME attacks on SSL where the compression ratio of
      a full page image gives a hint of what is the existing data of this page.
      This vulnerability is quite cumbersome to exploit in practice, but doable.
      
      So this patch makes wal_compression PGC_SUSET in order to prevent
      non-superusers from enabling it and exploiting the vulnerability while
      DBA thinks the risk very seriously and disables it in postgresql.conf.
      
      Back-patch to 9.5 where wal_compression was introduced.
      c2e5f4d1
    • Heikki Linnakangas's avatar
      Use --debug flag in "remote" pg_rewind regression tests. · 23b89288
      Heikki Linnakangas authored
      Gives more information in the log, to debug possible failures.
      23b89288
    • Heikki Linnakangas's avatar
      Fix another broken link in documentation. · aaec6a6d
      Heikki Linnakangas authored
      Tom fixed another one of these in commit 7f32dbcd, but there was another
      almost identical one in libpq docs. Per his comment:
      
      HP's web server has apparently become case-sensitive sometime recently.
      Per bug #13479 from Daniel Abraham.  Corrected link identified by Alvaro.
      aaec6a6d
    • Heikki Linnakangas's avatar
      Improve logging of TAP tests. · 1ea06203
      Heikki Linnakangas authored
      Create a log file for each test run. Stdout and stderr of the test script,
      as well as any subprocesses run as part of the test, are redirected to
      the log file. This makes it a lot easier to debug test failures. Also print
      the test output (ok 12 - ... messages) to the log file, and the command
      line of any external programs executed with the system_or_bail and run_log
      functions. This makes it a lot easier to debug failing tests.
      
      Modify some of the pg_ctl and other command invocations to not use 'silent'
      or 'quiet' options, and don't redirect output to /dev/null, so that you get
      all the information in the log instead.
      
      In the passing, construct some command lines in a way that works if $tempdir
      contains quote-characters. I haven't systematically gone through all of
      them or tested that, so I don't know if this is enough to make that work.
      
      pg_rewind tests had a custom mechanism for creating a similar log file. Use
      the new generic facility instead.
      
      Michael Paquier and me.
      1ea06203
    • Heikki Linnakangas's avatar
      Use AS_IF rather than plain shell "if" in pthread-check. · 01051a98
      Heikki Linnakangas authored
      Autoconf generates additional code for the first AC_CHECK_HEADERS call in
      the script. If the first call is within an if-block, the additional code is
      put inside the if-block too, even though it is needed by subsequent
      AC_CHECK_HEADERS checks and should always be executed. When I moved the
      pthread-related checks earlier in the script, the pthread.h test inside
      the block became the very first AC_CHECK_HEADERS call in the script,
      triggering that problem.
      
      To fix, use AS_IF instead of plain shell if. AS_IF knows about that issue,
      and makes sure the additional code is always executed. To be completely
      safe from this issue (and others), we should always be using AS_IF instead
      of plain if, but that seems like excessive caution given that this is the
      first time we have trouble like this. Plain if-then is more readable than
      AS_IF.
      
      This should fix compilation with --disable-thread-safety, and hopefully the
      buildfarm failure on forgmouth, related to mingw standard headers, too.
      I backpatched the previous fixes to 9.5, but it's starting to look like
      these changes are too fiddly to backpatch, so commit this to master only,
      and revert all the pthread-related configure changes in 9.5.
      01051a98
    • Noah Misch's avatar