1. 28 10月, 2009 3 次提交
    • T
      When FOR UPDATE/SHARE is used with LIMIT, put the LockRows plan node · 46e3a16b
      Tom Lane 提交于
      underneath the Limit node, not atop it.  This fixes the old problem that such
      a query might unexpectedly return fewer rows than the LIMIT says, due to
      LockRows discarding updated rows.
      
      There is a related problem that LockRows might destroy the sort ordering
      produced by earlier steps; but fixing that by pushing LockRows below Sort
      would create serious performance problems that are unjustified in many
      real-world applications, as well as potential deadlock problems from locking
      many more rows than expected.  Instead, keep the present semantics of applying
      FOR UPDATE after ORDER BY within a single query level; but allow the user to
      specify the other way by writing FOR UPDATE in a sub-select.  To make that
      work, track whether FOR UPDATE appeared explicitly in sub-selects or got
      pushed down from the parent, and don't flatten a sub-select that contained an
      explicit FOR UPDATE.
      46e3a16b
    • T
      Fix AfterTriggerSaveEvent to use a test and elog, not just Assert, to check · 44956c52
      Tom Lane 提交于
      that it's called within an AfterTriggerBeginQuery/AfterTriggerEndQuery pair.
      The RI cascade triggers suppress that overhead on the assumption that they
      are always run non-deferred, so it's possible to violate the condition if
      someone mistakenly changes pg_trigger to mark such a trigger deferred.
      We don't really care about supporting that, but throwing an error instead
      of crashing seems desirable.  Per report from Marcelo Costa.
      44956c52
    • T
      Make FOR UPDATE/SHARE in the primary query not propagate into WITH queries; · 61e53282
      Tom Lane 提交于
      for example in
        WITH w AS (SELECT * FROM foo) SELECT * FROM w, bar ... FOR UPDATE
      the FOR UPDATE will now affect bar but not foo.  This is more useful and
      consistent than the original 8.4 behavior, which tried to propagate FOR UPDATE
      into the WITH query but always failed due to assorted implementation
      restrictions.  Even though we are in process of removing those restrictions,
      it seems correct on philosophical grounds to not let the outer query's
      FOR UPDATE affect the WITH query.
      
      In passing, fix isLockedRel which frequently got things wrong in
      nested-subquery cases: "FOR UPDATE OF foo" applies to an alias foo in the
      current query level, not subqueries.  This has been broken for a long time,
      but it doesn't seem worth back-patching further than 8.4 because the actual
      consequences are minimal.  At worst the parser would sometimes get
      RowShareLock on a relation when it should be AccessShareLock or vice versa.
      That would only make a difference if someone were using ExclusiveLock
      concurrently, which no standard operation does, and anyway FOR UPDATE
      doesn't result in visible changes so it's not clear that the someone would
      notice any problem.  Between that and the fact that FOR UPDATE barely works
      with subqueries at all in existing releases, I'm not excited about worrying
      about it.
      61e53282
  2. 27 10月, 2009 2 次提交
  3. 26 10月, 2009 1 次提交
    • T
      Re-implement EvalPlanQual processing to improve its performance and eliminate · 9f2ee8f2
      Tom Lane 提交于
      a lot of strange behaviors that occurred in join cases.  We now identify the
      "current" row for every joined relation in UPDATE, DELETE, and SELECT FOR
      UPDATE/SHARE queries.  If an EvalPlanQual recheck is necessary, we jam the
      appropriate row into each scan node in the rechecking plan, forcing it to emit
      only that one row.  The former behavior could rescan the whole of each joined
      relation for each recheck, which was terrible for performance, and what's much
      worse could result in duplicated output tuples.
      
      Also, the original implementation of EvalPlanQual could not re-use the recheck
      execution tree --- it had to go through a full executor init and shutdown for
      every row to be tested.  To avoid this overhead, I've associated a special
      runtime Param with each LockRows or ModifyTable plan node, and arranged to
      make every scan node below such a node depend on that Param.  Thus, by
      signaling a change in that Param, the EPQ machinery can just rescan the
      already-built test plan.
      
      This patch also adds a prohibition on set-returning functions in the
      targetlist of SELECT FOR UPDATE/SHARE.  This is needed to avoid the
      duplicate-output-tuple problem.  It seems fairly reasonable since the
      other restrictions on SELECT FOR UPDATE are meant to ensure that there
      is a unique correspondence between source tuples and result tuples,
      which an output SRF destroys as much as anything else does.
      9f2ee8f2
  4. 23 10月, 2009 1 次提交
  5. 22 10月, 2009 2 次提交
    • T
      Remove regex_flavor GUC, so that regular expressions are always "advanced" · ab61df9e
      Tom Lane 提交于
      style by default.  Per discussion, there seems to be hardly anything that
      really relies on being able to change the regex flavor, so the ability to
      select it via embedded options ought to be enough for any stragglers.
      Also, if we didn't remove the GUC, we'd really be morally obligated to
      mark the regex functions non-immutable, which'd possibly create performance
      issues.
      ab61df9e
    • T
      Remove add_missing_from GUC and associated parser support for "implicit RTEs". · 289e2905
      Tom Lane 提交于
      Per recent discussion, add_missing_from has been deprecated for long enough to
      consider removing, and it's getting in the way of planned parser refactoring.
      The system now always behaves as though add_missing_from were OFF.
      289e2905
  6. 21 10月, 2009 1 次提交
  7. 17 10月, 2009 3 次提交
  8. 15 10月, 2009 2 次提交
  9. 14 10月, 2009 1 次提交
  10. 13 10月, 2009 7 次提交
  11. 10 10月, 2009 3 次提交
    • T
      Improve similar_escape() in two different ways: · 05d24971
      Tom Lane 提交于
      * Stop escaping ? and {.  As of SQL:2008, SIMILAR TO is defined to have
      POSIX-compatible interpretation of ? as well as {m,n} and related constructs,
      so we should allow these things through to our regex engine.
      
      * Escape ^ and $.  It appears that our regex engine will treat ^^ at the
      beginning of the string the same as ^, and similarly for $$ at the end of
      the string, which meant that SIMILAR TO was effectively ignoring ^ at the
      start of the pattern and $ at the end.  Since these are not supposed to be
      metacharacters, this is a bug.
      
      The second part of this is arguably a back-patchable bug fix, but I'm
      hesitant to do that because it might break applications that are expecting
      something like "col SIMILAR TO '^foo$'" to work like a POSIX pattern.
      Seems safer to only change it at a major version boundary.
      
      Per discussion of an example from Doug Gorley.
      05d24971
    • T
      Split the processing of INSERT/UPDATE/DELETE operations out of execMain.c. · 8a5849b7
      Tom Lane 提交于
      They are now handled by a new plan node type called ModifyTable, which is
      placed at the top of the plan tree.  In itself this change doesn't do much,
      except perhaps make the handling of RETURNING lists and inherited UPDATEs a
      tad less klugy.  But it is necessary preparation for the intended extension of
      allowing RETURNING queries inside WITH.
      
      Marko Tiikkaja
      8a5849b7
    • P
      Use pg_get_triggerdef in pg_dump · b865d275
      Peter Eisentraut 提交于
      Add a variant of pg_get_triggerdef with a second argument "pretty" that
      causes the output to be formatted in the way pg_dump used to do.  Use this
      variant in pg_dump with server versions >= 8.5.
      
      This insulates pg_dump from most future trigger feature additions, such as
      the upcoming column triggers patch.
      
      Author: Itagaki Takahiro <itagaki.takahiro@oss.ntt.co.jp>
      b865d275
  12. 09 10月, 2009 1 次提交
    • T
      Remove very ancient tuple-counting infrastructure (IncrRetrieved() and · c970292a
      Tom Lane 提交于
      friends).  This code has all been ifdef'd out for many years, and doesn't
      seem to have any prospect of becoming any more useful in the future.
      EXPLAIN ANALYZE is what people use in practice, and I think if we did want
      process-wide counters we'd be more likely to put in dtrace events for that
      than try to resurrect this code.  Get rid of it so as to have one less detail
      to worry about while refactoring execMain.c.
      c970292a
  13. 08 10月, 2009 4 次提交
    • H
      Fix off-by-one bug in bitncmp(): When comparing a number of bits divisible by · eab94d81
      Heikki Linnakangas 提交于
      8, bitncmp() may dereference a pointer one byte out of bounds.
      
      Chris Mikkelson (bug #5101)
      eab94d81
    • T
      Support use of function argument names to identify which actual arguments · 717fa274
      Tom Lane 提交于
      match which function parameters.  The syntax uses AS, for example
      	funcname(value AS arg1, anothervalue AS arg2)
      
      Pavel Stehule
      717fa274
    • A
      Make it possibly to specify GUC params per user and per database. · 2eda8dfb
      Alvaro Herrera 提交于
      Create a new catalog pg_db_role_setting where they are now stored, and better
      encapsulate the code that deals with settings into its realm.  The old
      datconfig and rolconfig columns are removed.
      
      psql has gained a \drds command to display the settings.
      
      Backwards compatibility warning: while the backwards-compatible system views
      still have the config columns, they no longer completely represent the
      configuration for a user or database.
      
      Catalog version bumped.
      2eda8dfb
    • A
      Fix snapshot management, take two. · 07cefdfb
      Alvaro Herrera 提交于
      Partially revert the previous patch I installed and replace it with a more
      general fix: any time a snapshot is pushed as Active, we need to ensure that it
      will not be modified in the future.  This means that if the same snapshot is
      used as CurrentSnapshot, it needs to be copied separately.  This affects
      serializable transactions only, because CurrentSnapshot has already been copied
      by RegisterSnapshot and so PushActiveSnapshot does not think it needs another
      copy.  However, CommandCounterIncrement would modify CurrentSnapshot, whereas
      ActiveSnapshots must not have their command counters incremented.
      
      I say "partially" because the regression test I added for the previous bug
      has been kept.
      
      (This restores 8.3 behavior, because before snapmgr.c existed, any snapshot set
      as Active was copied.)
      
      Per bug report from Stuart Bishop in
      6bc73d4c0910042358k3d1adff3qa36f8df75198ecea@mail.gmail.com
      07cefdfb
  14. 06 10月, 2009 2 次提交
    • T
      Change CREATE TABLE so that column default expressions coming from different · e0c433c4
      Tom Lane 提交于
      inheritance parent tables are compared using equal(), instead of doing
      strcmp() on the nodeToString representation.  The old implementation was
      always a tad cheesy, and it finally fails completely as of 8.4, now that the
      node tree might contain syntax location information.  equal() knows it's
      supposed to ignore those fields, but strcmp() hardly can.  Per recent
      report from Scott Ribe.
      e0c433c4
    • T
      Create an ALTER DEFAULT PRIVILEGES command, which allows users to adjust · 249724cb
      Tom Lane 提交于
      the privileges that will be applied to subsequently-created objects.
      
      Such adjustments are always per owning role, and can be restricted to objects
      created in particular schemas too.  A notable benefit is that users can
      override the traditional default privilege settings, eg, the PUBLIC EXECUTE
      privilege traditionally granted by default for functions.
      
      Petr Jelinek
      249724cb
  15. 04 10月, 2009 2 次提交
    • T
      Fix assorted memory leaks in pg_hba.conf parsing. Over a sufficiently · 35a173ab
      Tom Lane 提交于
      large number of SIGHUP cycles, these would have run the postmaster out
      of memory.  Noted while testing memory-leak scenario in postgresql.conf
      configuration-change-printing patch.
      35a173ab
    • T
      Fix a couple of issues in recent patch to print updates to postgresql.conf · 54d60bbd
      Tom Lane 提交于
      settings: avoid calling superuser() in contexts where it's not defined,
      don't leak the transient copies of GetConfigOption output, and avoid the
      whole exercise in postmaster child processes.
      
      I found that actually no current caller of GetConfigOption has any use for
      its internal check of GUC_SUPERUSER_ONLY.  But rather than just remove
      that entirely, it seemed better to add a parameter indicating whether to
      enforce the check.
      
      Per report from Simon and subsequent testing.
      54d60bbd
  16. 03 10月, 2009 4 次提交
    • T
      Fix an oversight in an 8.3-era patch: pgstat_initstats should allow stats · 66a8417f
      Tom Lane 提交于
      to be collected for sequences.
      
      Report and fix by Akira Kurosawa
      66a8417f
    • T
      Make sure that GIN fast-insert and regular code paths enforce the same · e66d7143
      Tom Lane 提交于
      tuple size limit.  Improve the error message for index-tuple-too-large
      so that it includes the actual size, the limit, and the index name.
      Sync with the btree occurrences of the same error.
      
      Back-patch to 8.4 because it appears that the out-of-sync problem
      is occurring in the field.
      
      Teodor and Tom
      e66d7143
    • T
      Fix erroneous handling of shared dependencies (ie dependencies on roles) · d691cb91
      Tom Lane 提交于
      in CREATE OR REPLACE FUNCTION.  The original code would update pg_shdepend
      as if a new function was being created, even if it wasn't, with two bad
      consequences: pg_shdepend might record the wrong owner for the function,
      and any dependencies for roles mentioned in the function's ACL would be lost.
      The fix is very easy: just don't touch pg_shdepend at all when doing a
      function replacement.
      
      Also update the CREATE FUNCTION reference page, which never explained
      exactly what changes and doesn't change in a function replacement.
      In passing, fix the CREATE VIEW reference page similarly; there's no
      code bug there, but the docs didn't say what happens.
      d691cb91
    • A
      Ensure that a cursor has an immutable snapshot throughout its lifespan. · caa4cfa3
      Alvaro Herrera 提交于
      The old coding was using a regular snapshot, referenced elsewhere, that was
      subject to having its command counter updated.  Fix by creating a private copy
      of the snapshot exclusively for the cursor.
      
      Backpatch to 8.4, which is when the bug was introduced during the snapshot
      management rewrite.
      caa4cfa3
  17. 01 10月, 2009 1 次提交