1. 01 2月, 2012 1 次提交
    • R
      Built-in JSON data type. · 5384a73f
      Robert Haas 提交于
      Like the XML data type, we simply store JSON data as text, after checking
      that it is valid.  More complex operations such as canonicalization and
      comparison may come later, but this is enough for not.
      
      There are a few open issues here, such as whether we should attempt to
      detect UTF-8 surrogate pairs represented as \uXXXX\uYYYY, but this gets
      the basic framework in place.
      5384a73f
  2. 31 1月, 2012 6 次提交
  3. 30 1月, 2012 8 次提交
    • H
      Make group commit more effective. · 9b38d46d
      Heikki Linnakangas 提交于
      When a backend needs to flush the WAL, and someone else is already flushing
      the WAL, wait until it releases the WALInsertLock and check if we still need
      to do the flush or if the other backend already did the work for us, before
      acquiring WALInsertLock. This helps group commit, because when the WAL flush
      finishes, all the backends that were waiting for it can be woken up in one
      go, and the can all concurrently observe that they're done, rather than
      waking them up one by one in a cascading fashion.
      
      This is based on a new LWLock function, LWLockWaitUntilFree(), which has
      peculiar semantics. If the lock is immediately free, it grabs the lock and
      returns true. If it's not free, it waits until it is released, but then
      returns false without grabbing the lock. This is used in XLogFlush(), so
      that when the lock is acquired, the backend flushes the WAL, but if it's
      not, the backend first checks the current flush location before retrying.
      
      Original patch and benchmarking by Peter Geoghegan and Simon Riggs, although
      this patch as committed ended up being very different from that.
      9b38d46d
    • S
    • S
      73f617f1
    • H
      Accept a non-existent value in "ALTER USER/DATABASE SET ..." command. · a5782570
      Heikki Linnakangas 提交于
      When default_text_search_config, default_tablespace, or temp_tablespaces
      setting is set per-user or per-database, with an "ALTER USER/DATABASE SET
      ..." statement, don't throw an error if the text search configuration or
      tablespace does not exist. In case of text search configuration, even if
      it doesn't exist in the current database, it might exist in another
      database, where the setting is intended to have its effect. This behavior
      is now the same as search_path's.
      
      Tablespaces are cluster-wide, so the same argument doesn't hold for
      tablespaces, but there's a problem with pg_dumpall: it dumps "ALTER USER
      SET ..." statements before the "CREATE TABLESPACE" statements. Arguably
      that's pg_dumpall's fault - it should dump the statements in such an order
      that the tablespace is created first and then the "ALTER USER SET
      default_tablespace ..." statements after that - but it seems better to be
      consistent with search_path and default_text_search_config anyway. Besides,
      you could still create a dump that throws an error, by creating the
      tablespace, running "ALTER USER SET default_tablespace", then dropping the
      tablespace and running pg_dumpall on that.
      
      Backpatch to all supported versions.
      a5782570
    • T
      Assorted comment fixes, mostly just typos, but some obsolete statements. · ad10853b
      Tom Lane 提交于
      YAMAMOTO Takashi
      ad10853b
    • T
      Fix typo in comment. · dd243b3e
      Tom Lane 提交于
      Peter Geoghegan
      dd243b3e
    • T
      Tweak index costing for problems with partial indexes. · 21a39de5
      Tom Lane 提交于
      btcostestimate() makes an estimate of the number of index tuples that will
      be visited based on knowledge of which index clauses can actually bound the
      scan within nbtree.  However, it forgot to account for partial indexes in
      this calculation, with the result that the cost of the index scan could be
      significantly overestimated for a partial index.  Fix that by merging the
      predicate with the abbreviated indexclause list, in the same way as we do
      with the full list to estimate how many heap tuples will be visited.
      
      Also, slightly increase the "fudge factor" that's meant to give preference
      to smaller indexes over larger ones.  While this is applied to all indexes,
      it's most important for partial indexes since it can be the only factor
      that makes a partial index look cheaper than a similar full index.
      Experimentation shows that the existing value is so small as to easily get
      swamped by noise such as page-boundary-roundoff behavior.  I'm tempted to
      kick it up more than this, but will refrain for now.
      
      Per report from Ruben Blanco.  These are long-standing issues, but given
      the lack of prior complaints I'm not going to risk changing planner
      behavior in back branches by back-patching.
      21a39de5
    • T
      Fix pushing of index-expression qualifications through UNION ALL. · b28ffd0f
      Tom Lane 提交于
      In commit 57664ed2, I made the planner
      wrap non-simple-variable outputs of appendrel children (IOW, child SELECTs
      of UNION ALL subqueries) inside PlaceHolderVars, in order to solve some
      issues with EquivalenceClass processing.  However, this means that any
      upper-level WHERE clauses mentioning such outputs will now contain
      PlaceHolderVars after they're pushed down into the appendrel child,
      and that prevents indxpath.c from recognizing that they could be matched
      to index expressions.  To fix, add explicit stripping of PlaceHolderVars
      from index operands, same as we have long done for RelabelType nodes.
      Add a regression test covering both this and the plain-UNION case (which
      is a totally different code path, but should also be able to do it).
      
      Per bug #6416 from Matteo Beccati.  Back-patch to 9.1, same as the
      previous change.
      b28ffd0f
  4. 29 1月, 2012 5 次提交
    • T
      Add caution about multiple unique indexes breaking plpgsql upsert example. · ed6e0545
      Tom Lane 提交于
      Per Phil Sorber, though I didn't use his wording exactly.
      ed6e0545
    • T
      Update statement about sorting of character-string data. · 17d3233e
      Tom Lane 提交于
      The sort order is no longer fixed at database creation time, but can be
      controlled via COLLATE.  Noted by Thomas Kellerer.
      17d3233e
    • T
      Fix handling of init_plans list in inheritance_planner(). · 4ec6581c
      Tom Lane 提交于
      Formerly we passed an empty list to each per-child-table invocation of
      grouping_planner, and then merged the results into the global list.
      However, that fails if there's a CTE attached to the statement, because
      create_ctescan_plan uses the list to find the plan referenced by a CTE
      reference; so it was unable to find any CTEs attached to the outer UPDATE
      or DELETE.  But there's no real reason not to use the same list throughout
      the process, and doing so is simpler and faster anyway.
      
      Per report from Josh Berkus of "could not find plan for CTE" failures.
      Back-patch to 9.1 where we added support for WITH attached to UPDATE or
      DELETE.  Add some regression test cases, too.
      4ec6581c
    • T
      Add simple tests of EvalPlanQual using the isolationtester infrastructure. · 759d9d67
      Tom Lane 提交于
      Much more could be done here, but at least now we have *some* automated
      test coverage of that mechanism.  In particular this tests the writable-CTE
      case reported by Phil Sorber.
      
      In passing, remove isolationtester's arbitrary restriction on the number of
      steps in a permutation list.  I used this so that a single spec file could
      be used to run several related test scenarios, but there are other possible
      reasons to want a step series that's not exactly a permutation.  Improve
      documentation and fix a couple other nits as well.
      759d9d67
    • T
      Fix handling of data-modifying CTE subplans in EvalPlanQual. · 7c1719bc
      Tom Lane 提交于
      We can't just skip initializing such subplans, because the referencing CTE
      node will expect to find the subplan available when it initializes.  That
      in turn means that ExecInitModifyTable must allow the case (which actually
      it needed to do anyway, since there's no guarantee that ModifyTable is
      exactly at the top of the CTE plan tree).  So move the complaint about not
      being allowed in EvalPlanQual mode to execution instead of initialization.
      Testing turned up yet another problem, which is that we'd try to
      re-initialize the result relation's index list, leading to leaks and
      dangling pointers.
      
      Per report from Phil Sorber.  Back-patch to 9.1 where data-modifying CTEs
      were introduced.
      7c1719bc
  5. 28 1月, 2012 12 次提交
    • M
      Prevent logging "failed to stat file: success" for temp files · 672614cf
      Magnus Hagander 提交于
      This was broken in commit bc334748, the
      addition of statistics counters for temp files.
      
      Reported by Thom Brown
      672614cf
    • T
      Fix error detection in contrib/pgcrypto's encrypt_iv() and decrypt_iv(). · a8b4b843
      Tom Lane 提交于
      Due to oversights, the encrypt_iv() and decrypt_iv() functions failed to
      report certain types of invalid-input errors, and would instead return
      random garbage values.
      
      Marko Kreen, per report from Stefan Kaltenbrunner
      a8b4b843
    • T
      Undo 8.4-era lobotomization of subquery pullup rules. · 0816fad6
      Tom Lane 提交于
      After the planner was fixed to convert some IN/EXISTS subqueries into
      semijoins or antijoins, we had to prevent it from doing that in some
      cases where the plans risked getting much worse.  The reason the plans
      got worse was that in the unoptimized implementation, subqueries could
      reference parameters from the outer query at any join level, and so
      full table scans could be avoided even if they were one or more levels
      of join below where the semi/anti join would be.  Now that we have
      sufficient mechanism in the planner to handle such cases properly,
      it should no longer be necessary to play dumb here.
      
      This reverts commits 07b9936a and
      cd1f0d04.  The latter was a stopgap
      fix that wasn't really sufficiently analyzed at the time.  Rather
      than just restricting ourselves to cases where the new join can be
      stacked on the right-hand input, we should also consider whether it
      can be stacked on the left-hand input.
      0816fad6
    • T
      Use parameterized paths to generate inner indexscans more flexibly. · e2fa76d8
      Tom Lane 提交于
      This patch fixes the planner so that it can generate nestloop-with-
      inner-indexscan plans even with one or more levels of joining between
      the indexscan and the nestloop join that is supplying the parameter.
      The executor was fixed to handle such cases some time ago, but the
      planner was not ready.  This should improve our plans in many situations
      where join ordering restrictions formerly forced complete table scans.
      
      There is probably a fair amount of tuning work yet to be done, because
      of various heuristics that have been added to limit the number of
      parameterized paths considered.  However, we are not going to find out
      what needs to be adjusted until the code gets some real-world use, so
      it's time to get it in there where it can be tested easily.
      
      Note API change for index AM amcostestimate functions.  I'm not aware of
      any non-core index AMs, but if there are any, they will need minor
      adjustments.
      e2fa76d8
    • P
      Show default privileges in information schema · b376ec6f
      Peter Eisentraut 提交于
      Hitherto, the information schema only showed explicitly granted
      privileges that were visible in the *acl catalog columns.  If no
      privileges had been granted, the implicit privileges were not shown.
      
      To fix that, add an SQL-accessible version of the acldefault()
      function, and use that inside the aclexplode() calls to substitute the
      catalog-specific default privilege set for null values.
      
      reviewed by Abhijit Menon-Sen
      b376ec6f
    • P
      Revert unfortunate whitespace change · bf90562a
      Peter Eisentraut 提交于
      In e5e2fc84, blank lines were removed
      after a comment block, which now looks as though the comment refers to
      the immediately following code, but it actually refers to the
      preceding code.  So put the blank lines back.
      bf90562a
    • P
      Disallow ALTER DOMAIN on non-domain type everywhere · 27874583
      Peter Eisentraut 提交于
      This has been the behavior already in most cases, but through
      omission, ALTER DOMAIN / OWNER TO and ALTER DOMAIN / SET SCHEMA would
      silently work on non-domain types as well.
      27874583
    • P
      Hide most variable-length fields from Form_pg_* structs · 8137f2c3
      Peter Eisentraut 提交于
      Those fields only appear in the structs so that genbki.pl can create
      the BKI bootstrap files for the catalogs.  But they are not actually
      usable from C.  So hiding them can prevent coding mistakes, saves
      stack space, and can help the compiler.
      
      In certain catalogs, the first variable-length field has been kept
      visible after manual inspection.  These exceptions are noted in C
      comments.
      
      reviewed by Tom Lane
      8137f2c3
    • P
      Do not access indclass through Form_pg_index · 8a3f745f
      Peter Eisentraut 提交于
      Normally, accessing variable-length members of catalog structures past
      the first one doesn't work at all.  Here, it happened to work because
      indnatts was checked to be 1, and so the defined FormData_pg_index
      layout, using int2vector[1] and oidvector[1] for variable-length
      arrays, happened to match the actual memory layout.  But it's a very
      fragile assumption, and it's not in a performance-critical path, so
      code it properly using heap_getattr() instead.
      
      bug analysis by Tom Lane
      8a3f745f
    • R
      Document that COUNT(*) might not need a seq scan any more. · eb6af016
      Robert Haas 提交于
      Noted by Josh Kupershmidt.
      eb6af016
    • R
      Document that analyzing an empty table doesn't update the statistics. · db6de5b7
      Robert Haas 提交于
      Per a suggestion from Sergey Konoplev
      db6de5b7
    • H
      Initialize the new bgwriterLatch field properly. · cf3fff63
      Heikki Linnakangas 提交于
      Peter Geoghegan
      cf3fff63
  6. 27 1月, 2012 8 次提交