1. 26 7月, 2015 8 次提交
    • A
      Build column mapping for grouping sets in all required cases. · 144666f6
      Andres Freund 提交于
      The previous coding frequently failed to fail because for one it's
      unusual to have rollup clauses with one column, and for another
      sometimes the wrong mapping didn't cause obvious problems.
      
      Author: Jeevan Chalke
      Reviewed-By: Andrew Gierth
      Discussion: CAM2+6=W=9=hQOipH0HAPbkun3Z3TFWij_EiHue0_6UX=oR=1kw@mail.gmail.com
      Backpatch: 9.5, where grouping sets were introduced
      144666f6
    • J
      Improve markup for row_security. · cf80ddee
      Joe Conway 提交于
      Wrap the literals on, off, force, and BYPASSRLS with appropriate
      markup. Per Kevin Grittner.
      cf80ddee
    • T
      Dodge portability issue (apparent compiler bug) in new tablesample code. · d9476b83
      Tom Lane 提交于
      Some of the older OS X critters in the buildfarm are failing regression,
      with symptoms showing that a request for 100% sampling in BERNOULLI or
      SYSTEM methods actually gets only around 50% of the table.  gdb revealed
      that the computation of the "cutoff" number was producing 0x7FFFFFFF
      rather than the expected 0x100000000.  Inspecting the assembly code,
      it looks like gcc is trying to use lrint() instead of rint() and then
      fumbling the conversion from long double to uint64.  This seems like a
      clear compiler bug, but assigning the intermediate result into a plain
      double variable works around it, so let's just do that.  (Another idea
      would be to give up one bit of hash width so that we don't need to use
      a uint64 cutoff, but let's see if this is enough.)
      d9476b83
    • A
      Restore use of zlib default compression in pg_dump directory mode. · caef94d5
      Andrew Dunstan 提交于
      This was broken by commit 0e7e355f and
      friends, which ignored the fact that gzopen() will treat "-1" in the
      mode argument as an invalid character, which it ignores, and a flag for
      compression level 1. Now, when this value is encountered no compression
      level flag is passed  to gzopen, leaving it to use the zlib default.
      
      Also, enforce the documented allowed range for pg_dump's -Z option,
      namely 0 .. 9, and remove some consequently dead code from
      pg_backup_tar.c.
      
      Problem reported by Marc Mamin.
      
      Backpatch to 9.1, like the patch that introduced the bug.
      caef94d5
    • T
      Some platforms now need contrib/tsm_system_time to be linked with libm. · c879d51c
      Tom Lane 提交于
      Buildfarm member hornet, at least, seems to want -lm in the link command.
      Probably this is due to the just-added use of isnan().
      c879d51c
    • T
      In pg_ctl, report unexpected failure to stat() the postmaster.pid file. · b7b5a189
      Tom Lane 提交于
      Any error other than ENOENT is a bit suspicious here, and perhaps should
      not be grounds for assuming the postmaster has failed.  For the moment
      though, just report it, and don't change the behavior otherwise.  The
      intent is mainly to try to determine why we are seeing intermittent
      failures in this area on some buildfarm members.
      
      Back-patch to 9.5 where some of these failures have happened.
      b7b5a189
    • T
      Update oidjoins regression test for 9.5. · 158d6153
      Tom Lane 提交于
      New FK relationships for pg_transform.  Also findoidjoins now detects a few
      relationships it didn't before for pre-existing catalogs, as a result of
      new regression tests leaving entries in those catalogs that weren't there
      before.
      158d6153
    • T
      Redesign tablesample method API, and do extensive code review. · dd7a8f66
      Tom Lane 提交于
      The original implementation of TABLESAMPLE modeled the tablesample method
      API on index access methods, which wasn't a good choice because, without
      specialized DDL commands, there's no way to build an extension that can
      implement a TSM.  (Raw inserts into system catalogs are not an acceptable
      thing to do, because we can't undo them during DROP EXTENSION, nor will
      pg_upgrade behave sanely.)  Instead adopt an API more like procedural
      language handlers or foreign data wrappers, wherein the only SQL-level
      support object needed is a single handler function identified by having
      a special return type.  This lets us get rid of the supporting catalog
      altogether, so that no custom DDL support is needed for the feature.
      
      Adjust the API so that it can support non-constant tablesample arguments
      (the original coding assumed we could evaluate the argument expressions at
      ExecInitSampleScan time, which is undesirable even if it weren't outright
      unsafe), and discourage sampling methods from looking at invisible tuples.
      Make sure that the BERNOULLI and SYSTEM methods are genuinely repeatable
      within and across queries, as required by the SQL standard, and deal more
      honestly with methods that can't support that requirement.
      
      Make a full code-review pass over the tablesample additions, and fix
      assorted bugs, omissions, infelicities, and cosmetic issues (such as
      failure to put the added code stanzas in a consistent ordering).
      Improve EXPLAIN's output of tablesample plans, too.
      
      Back-patch to 9.5 so that we don't have to support the original API
      in production.
      dd7a8f66
  2. 25 7月, 2015 1 次提交
    • J
      Make RLS work with UPDATE ... WHERE CURRENT OF · b26e3d66
      Joe Conway 提交于
      UPDATE ... WHERE CURRENT OF would not work in conjunction with
      RLS. Arrange to allow the CURRENT OF expression to be pushed down.
      Issue noted by Peter Geoghegan. Patch by Dean Rasheed. Back patch
      to 9.5 where RLS was introduced.
      b26e3d66
  3. 24 7月, 2015 2 次提交
    • A
      Fix treatment of nulls in jsonb_agg and jsonb_object_agg · d9a356ff
      Andrew Dunstan 提交于
      The wrong is_null flag was being passed to datum_to_json. Also, null
      object key values are not permitted, and this was not being checked
      for. Add regression tests covering these cases, and also add those tests
      to the json set, even though it was doing the right thing.
      
      Fixes bug #13514, initially diagnosed by Tom Lane.
      d9a356ff
    • A
      Fix bug around assignment expressions containing indirections. · c1ca3a19
      Andres Freund 提交于
      Handling of assigned-to expressions with indirection (e.g. set f1[1] =
      3) was broken for ON CONFLICT DO UPDATE.  The problem was that
      ParseState was consulted to determine if an INSERT-appropriate or
      UPDATE-appropriate behavior should be used when transforming expressions
      with indirections. When the wrong path was taken the old row was
      substituted with NULL, leading to wrong results..
      
      To fix remove p_is_update and only use p_is_insert to decide how to
      transform the assignment expression, and uset p_is_insert while parsing
      the on conflict statement. This isn't particularly pretty, but it's not
      any worse than before.
      
      Author: Peter Geoghegan, slightly edited by me
      Discussion: CAM3SWZS8RPvA=KFxADZWw3wAHnnbxMxDzkEC6fNaFc7zSm411w@mail.gmail.com
      Backpatch: 9.5, where the feature was introduced
      c1ca3a19
  4. 23 7月, 2015 2 次提交
    • A
      Redirect install output of make check into a log file · 16c33c50
      Andrew Dunstan 提交于
      dbf2ec1a changed make check so that the installation logs get directed
      to stdout and stderr. Per discussion on -hackers, this patch restores
      saving it to a file. It is now saved in /tmp_install/log, which is
      created once per invocation of any make target doing regression tests.
      
      Along the way, add a missing /log/ entry to test_ddl_deparse's
      .gitignore.
      
      Michael Paquier.
      16c33c50
    • H
      Fix off-by-one error in calculating subtrans/multixact truncation point. · 766dcfb1
      Heikki Linnakangas 提交于
      If there were no subtransactions (or multixacts) active, we would calculate
      the oldestxid == next xid. That's correct, but if next XID happens to be
      on the next pg_subtrans (pg_multixact) page, the page does not exist yet,
      and SimpleLruTruncate will produce an "apparent wraparound" warning. The
      warning is harmless in this case, but looks very alarming to users.
      
      Backpatch to all supported versions. Patch and analysis by Thomas Munro.
      766dcfb1
  5. 22 7月, 2015 3 次提交
    • T
      Fix add_rte_to_flat_rtable() for recent feature additions. · 46d0a9bf
      Tom Lane 提交于
      The TABLESAMPLE and row security patches each overlooked this function,
      though their errors of omission were opposite: RLS failed to zero out the
      securityQuals field, leading to wasteful copying of useless expression
      trees in finished plans, while TABLESAMPLE neglected to add a comment
      saying that it intentionally *isn't* deleting the tablesample subtree.
      There probably should be a similar comment about ctename, too.
      
      Back-patch as appropriate.
      46d0a9bf
    • H
      Add selectivity estimation functions for intarray operators. · c6fbe6d6
      Heikki Linnakangas 提交于
      Uriy Zhuravlev and Alexander Korotkov, reviewed by Jeff Janes, some cleanup
      by me.
      c6fbe6d6
    • T
      Fix some oversights in BRIN patch. · 43487380
      Tom Lane 提交于
      Remove HeapScanDescData.rs_initblock, which wasn't being used for anything
      in the final version of the patch.
      
      Fix IndexBuildHeapScan so that it supports syncscan again; the patch
      broke synchronous scanning for index builds by forcing rs_startblk
      to zero even when the caller did not care about that and had asked
      for syncscan.
      
      Add some commentary and usage defenses to heap_setscanlimits().
      
      Fix heapam so that asking for rs_numblocks == 0 does what you would
      reasonably expect.  As coded it amounted to requesting a whole-table
      scan, because those "--x <= 0" tests on an unsigned variable would
      behave surprisingly.
      43487380
  6. 21 7月, 2015 4 次提交
  7. 20 7月, 2015 8 次提交
  8. 18 7月, 2015 6 次提交
    • T
      Make WaitLatchOrSocket's timeout detection more robust. · 576a95b3
      Tom Lane 提交于
      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
    • A
      Enable transforms modules to build and test on Cygwin. · 00eff86c
      Andrew Dunstan 提交于
      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
    • A
      Release note compatibility item · 47386504
      Andrew Dunstan 提交于
      Note that json and jsonb extraction operators no longer consider a
      negative subscript to be invalid.
      47386504
    • A
      Support JSON negative array subscripts everywhere · e02d44b8
      Andrew Dunstan 提交于
      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
    • T
      Repair mishandling of cached cast-expression trees in plpgsql. · 0fc94a5b
      Tom Lane 提交于
      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
    • T
      Fix entirely broken permissions test in new alter_operator regression test. · 266e7714
      Tom Lane 提交于
      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
  9. 17 7月, 2015 3 次提交
    • R
      Add new function pg_notification_queue_usage. · a04bb65f
      Robert Haas 提交于
      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
    • N
      AIX: Test the -qlonglong option before use. · 43d89a23
      Noah Misch 提交于
      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
    • T
      Fix a low-probability crash in our qsort implementation. · 9d6077ab
      Tom Lane 提交于
      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
  10. 16 7月, 2015 3 次提交