1. 19 7月, 2011 6 次提交
  2. 18 7月, 2011 6 次提交
    • R
      Avoid index rebuild for no-rewrite ALTER TABLE .. ALTER TYPE. · 367bc426
      Robert Haas 提交于
      Noah Misch.  Review and minor cosmetic changes by me.
      367bc426
    • M
      Made ecpglib write double with a precision of 15 digits. · 8f8a273c
      Michael Meskes 提交于
      Patch originally by Akira Kurosawa <kurosawa-akira@mxc.nes.nec.co.jp>.
      8f8a273c
    • R
      Create a "fast path" for acquiring weak relation locks. · 3cba8999
      Robert Haas 提交于
      When an AccessShareLock, RowShareLock, or RowExclusiveLock is requested
      on an unshared database relation, and we can verify that no conflicting
      locks can possibly be present, record the lock in a per-backend queue,
      stored within the PGPROC, rather than in the primary lock table.  This
      eliminates a great deal of contention on the lock manager LWLocks.
      
      This patch also refactors the interface between GetLockStatusData() and
      pg_lock_status() to be a bit more abstract, so that we don't rely so
      heavily on the lock manager's internal representation details.  The new
      fast path lock structures don't have a LOCK or PROCLOCK structure to
      return, so we mustn't depend on that for purposes of listing outstanding
      locks.
      
      Review by Jeff Davis.
      3cba8999
    • R
      Add pg_opfamily_is_visible. · b59d2fe4
      Robert Haas 提交于
      We already have similar functions for many other object types, including
      operator classes, so it seems like we should have this one, too.
      
      Extracted from a larger patch by Josh Kupershmidt
      b59d2fe4
    • T
      Further thoughts about temp_file_limit patch. · 9473bb96
      Tom Lane 提交于
      Move FileClose's decrement of temporary_files_size up, so that it will be
      executed even if elog() throws an error.  This is reasonable since if the
      unlink() fails, the fact the file is still there is not our fault, and we
      are going to forget about it anyhow.  So we won't count it against
      temp_file_limit anymore.
      
      Update fileSize and temporary_files_size correctly in FileTruncate.
      We probably don't have any places that truncate temp files, but fd.c
      surely should not assume that.
      9473bb96
    • T
      Add temp_file_limit GUC parameter to constrain temporary file space usage. · 23e5b16c
      Tom Lane 提交于
      The limit is enforced against the total amount of temp file space used by
      each session.
      
      Mark Kirkwood, reviewed by Cédric Villemain and Tatsuo Ishii
      23e5b16c
  3. 17 7月, 2011 5 次提交
    • T
      Improve make_subplanTargetList to avoid including Vars unnecessarily. · 1bc16a94
      Tom Lane 提交于
      If a Var was used only in a GROUP BY expression, the previous
      implementation would include the Var by itself (as well as the expression)
      in the generated targetlist.  This wouldn't affect the efficiency of the
      scan/join part of the plan at all, but it could result in passing
      unnecessarily-wide rows through sorting and grouping steps.  It turns out
      to take only a little more code, and not noticeably more time, to generate
      a tlist without such redundancy, so let's do that.  Per a recent gripe from
      HarmeekSingh Bedi.
      1bc16a94
    • T
      Replace errdetail("%s", ...) with errdetail_internal("%s", ...). · 1af37ec9
      Tom Lane 提交于
      There may be some other places where we should use errdetail_internal,
      but they'll have to be evaluated case-by-case.  This commit just hits
      a bunch of places where invoking gettext is obviously a waste of cycles.
      1af37ec9
    • T
      Use errdetail_internal() for SSI transaction cancellation details. · 3ee7c871
      Tom Lane 提交于
      Per discussion, these seem too technical to be worth translating.
      
      Kevin Grittner
      3ee7c871
    • T
      Add an errdetail_internal() ereport auxiliary routine. · ed7ed767
      Tom Lane 提交于
      This function supports untranslated detail messages, in the same way that
      errmsg_internal supports untranslated primary messages.  We've needed this
      for some time IMO, but discussion of some cases in the SSI code provided
      the impetus to actually add it.
      
      Kevin Grittner, with minor adjustments by me
      ed7ed767
    • M
      Fix SSPI login when multiple roundtrips are required · 0886dde5
      Magnus Hagander 提交于
      This fixes SSPI login failures showing "The function
      requested is not supported", often showing up when connecting
      to localhost. The reason was not properly updating the SSPI
      handle when multiple roundtrips were required to complete the
      authentication sequence.
      
      Report and analysis by Ahmed Shinwari, patch by Magnus Hagander
      0886dde5
  4. 16 7月, 2011 2 次提交
  5. 15 7月, 2011 4 次提交
    • H
      Change the way the offset of downlink is stored in GISTInsertStack. · 8d260911
      Heikki Linnakangas 提交于
      GISTInsertStack.childoffnum used to mean "offset of the downlink in this
      node, pointing to the child node in the stack". It's now replaced with
      downlinkoffnum, which means "offset of the downlink in the parent of this
      node". gistFindPath() already used childoffnum with this new meaning, and
      had an extra step at the end to pull all the childoffnum values down one
      node in the stack, to adjust the stack for the meaning that childoffnum had
      elsewhere. That's no longer required.
      
      The reason to do this now is this new representation is more convenient for
      the GiST fast build patch that Alexander Korotkov is working on.
      
      While we're at it, replace the linked list used in gistFindPath with a
      standard List, and make gistFindPath() static.
      
      Alexander Korotkov, with some changes by me.
      8d260911
    • H
      Fix two ancient bugs in GiST code to re-find a parent after page split: · bc175eb8
      Heikki Linnakangas 提交于
      First, when following a right-link, we incorrectly marked the current page
      as the parent of the right sibling. In reality, the parent of the right page
      is the same as the parent of the current page (or some page to the right of
      it, gistFindCorrectParent() will sort that out).
      
      Secondly, when we follow a right-link, we must prepend, not append, the right
      page to our list of pages to visit. That's because we assume that once we
      hit a leaf page in the list, all the rest are leaf pages too, and give up.
      
      To hit these bugs, you need concurrent actions and several unlucky accidents.
      Another backend must split the root page, while you're in process of
      splitting a lower-level page. Furthermore, while you scan the internal nodes
      to re-find the parent, another backend needs to again split some more internal
      pages. Even then, the bugs don't necessarily manifest as user-visible errors
      or index corruption.
      
      While we're at it, make the error reporting a bit better if gistFindPath()
      fails to re-find the parent. It used to be an assertion, but an elog() seems
      more appropriate.
      
      Backpatch to all supported branches.
      bc175eb8
    • T
      In planner, don't assume that empty parent tables aren't really empty. · f3ff0433
      Tom Lane 提交于
      There's a heuristic in estimate_rel_size() to clamp the minimum size
      estimate for a table to 10 pages, unless we can see that vacuum or analyze
      has been run (and set relpages to something nonzero, so this will always
      happen for a table that's actually empty).  However, it would be better
      not to do this for inheritance parent tables, which very commonly are
      really empty and can be expected to stay that way.  Per discussion of a
      recent pgsql-performance report from Anish Kejariwal.  Also prevent it
      from happening for indexes (although this is more in the nature of
      documentation, since CREATE INDEX normally initializes relpages to
      something nonzero anyway).
      
      Back-patch to 9.0, because the ability to collect statistics across a
      whole inheritance tree has improved the planner's estimates to the point
      where this relatively small error makes a significant difference.  In the
      referenced report, merge or hash joins were incorrectly estimated as
      cheaper than a nestloop with inner indexscan on the inherited table.
      That was less likely before 9.0 because the lack of inherited stats would
      have resulted in a default (and rather pessimistic) estimate of the cost
      of a merge or hash join.
      f3ff0433
    • P
      Set information_schema.routines.is_udt_dependent to NO · f4678c20
      Peter Eisentraut 提交于
      It previously said YES, but that is incorrect.
      f4678c20
  6. 14 7月, 2011 2 次提交
  7. 13 7月, 2011 3 次提交
    • A
      Blind attempt at fixing isolation_tester on Win32 · 0d29c375
      Alvaro Herrera 提交于
      0d29c375
    • T
      Avoid listing ungrouped Vars in the targetlist of Agg-underneath-Window. · c1d9579d
      Tom Lane 提交于
      Regular aggregate functions in combination with, or within the arguments
      of, window functions are OK per spec; they have the semantics that the
      aggregate output rows are computed and then we run the window functions
      over that row set.  (Thus, this combination is not really useful unless
      there's a GROUP BY so that more than one aggregate output row is possible.)
      The case without GROUP BY could fail, as recently reported by Jeff Davis,
      because sloppy construction of the Agg node's targetlist resulted in extra
      references to possibly-ungrouped Vars appearing outside the aggregate
      function calls themselves.  See the added regression test case for an
      example.
      
      Fixing this requires modifying the API of flatten_tlist and its underlying
      function pull_var_clause.  I chose to make pull_var_clause's API for
      aggregates identical to what it was already doing for placeholders, since
      the useful behaviors turn out to be the same (error, report node as-is, or
      recurse into it).  I also tightened the error checking in this area a bit:
      if it was ever valid to see an uplevel Var, Aggref, or PlaceHolderVar here,
      that was a long time ago, so complain instead of ignoring them.
      
      Backpatch into 9.1.  The failure exists in 8.4 and 9.0 as well, but seeing
      that it only occurs in a basically-useless corner case, it doesn't seem
      worth the risks of changing a function API in a minor release.  There might
      be third-party code using pull_var_clause.
      c1d9579d
    • A
      Add support for blocked commands in isolationtester · 846af54d
      Alvaro Herrera 提交于
      This enables us to test that blocking commands (such as foreign keys
      checks that conflict with some other lock) act as intended.  The set of
      tests that this adds is pretty minimal, but can easily be extended by
      adding new specs.
      
      The intention is that this will serve as a basis for ensuring that
      further tweaks of locking implementation preserve (or improve) existing
      behavior.
      
      Author: Noah Misch
      846af54d
  8. 12 7月, 2011 2 次提交
  9. 11 7月, 2011 1 次提交
    • P
      Fix and clarify information schema interval_precision fields · 3315020a
      Peter Eisentraut 提交于
      The fields were previously wrongly typed as character_data; change to
      cardinal_number.  Update the documentation and the implementation to
      show more clearly that this applies to a feature not available in
      PostgreSQL, rather than just not yet being implemented in the
      information schema.
      3315020a
  10. 09 7月, 2011 2 次提交
    • R
      Try to acquire relation locks in RangeVarGetRelid. · 4240e429
      Robert Haas 提交于
      In the previous coding, we would look up a relation in RangeVarGetRelid,
      lock the resulting OID, and then AcceptInvalidationMessages().  While
      this was sufficient to ensure that we noticed any changes to the
      relation definition before building the relcache entry, it didn't
      handle the possibility that the name we looked up no longer referenced
      the same OID.  This was particularly problematic in the case where a
      table had been dropped and recreated: we'd latch on to the entry for
      the old relation and fail later on.  Now, we acquire the relation lock
      inside RangeVarGetRelid, and retry the name lookup if we notice that
      invalidation messages have been processed meanwhile.  Many operations
      that would previously have failed with an error in the presence of
      concurrent DDL will now succeed.
      
      There is a good deal of work remaining to be done here: many callers
      of RangeVarGetRelid still pass NoLock for one reason or another.  In
      addition, nothing in this patch guards against the possibility that
      the meaning of an unqualified name might change due to the creation
      of a relation in a schema earlier in the user's search path than the
      one where it was previously found.  Furthermore, there's nothing at
      all here to guard against similar race conditions for non-relations.
      For all that, it's a start.
      
      Noah Misch and Robert Haas
      4240e429
    • T
      Fix another oversight in logging of changes in postgresql.conf settings. · 9d522cb3
      Tom Lane 提交于
      We were using GetConfigOption to collect the old value of each setting,
      overlooking the possibility that it didn't exist yet.  This does happen
      in the case of adding a new entry within a custom variable class, as
      exhibited in bug #6097 from Maxim Boguk.
      
      To fix, add a missing_ok parameter to GetConfigOption, but only in 9.1
      and HEAD --- it seems possible that some third-party code is using that
      function, so changing its API in a minor release would cause problems.
      In 9.0, create a near-duplicate function instead.
      9d522cb3
  11. 08 7月, 2011 7 次提交
    • H
      Introduce a pipe between postmaster and each backend, which can be used to · 89fd72cb
      Heikki Linnakangas 提交于
      detect postmaster death. Postmaster keeps the write-end of the pipe open,
      so when it dies, children get EOF in the read-end. That can conveniently
      be waited for in select(), which allows eliminating some of the polling
      loops that check for postmaster death. This patch doesn't yet change all
      the loops to use the new mechanism, expect a follow-on patch to do that.
      
      This changes the interface to WaitLatch, so that it takes as argument a
      bitmask of events that it waits for. Possible events are latch set, timeout,
      postmaster death, and socket becoming readable or writeable.
      
      The pipe method behaves slightly differently from the kill() method
      previously used in PostmasterIsAlive() in the case that postmaster has died,
      but its parent has not yet read its exit code with waitpid(). The pipe
      returns EOF as soon as the process dies, but kill() continues to return
      true until waitpid() has been called (IOW while the process is a zombie).
      Because of that, change PostmasterIsAlive() to use the pipe too, otherwise
      WaitLatch() would return immediately with WL_POSTMASTER_DEATH, while
      PostmasterIsAlive() would claim it's still alive. That could easily lead to
      busy-waiting while postmaster is in zombie state.
      
      Peter Geoghegan with further changes by me, reviewed by Fujii Masao and
      Florian Pflug.
      89fd72cb
    • H
      Fix one overflow and one signedness error, caused by the patch to calculate · 9598afa3
      Heikki Linnakangas 提交于
      OLDSERXID_MAX_PAGE based on BLCKSZ. MSVC compiler warned about these.
      9598afa3
    • P
      Message style improvements · f05c6509
      Peter Eisentraut 提交于
      f05c6509
    • H
      There's a small window wherein a transaction is committed but not yet · bdaabb9b
      Heikki Linnakangas 提交于
      on the finished list, and we shouldn't flag it as a potential conflict
      if so. We can also skip adding a doomed transaction to the list of
      possible conflicts because we know it won't commit.
      
      Dan Ports and Kevin Grittner.
      bdaabb9b
    • H
      SSI has a race condition, where the order of commit sequence numbers of · 406d6183
      Heikki Linnakangas 提交于
      transactions might not match the order the work done in those transactions
      become visible to others. The logic in SSI, however, assumed that it does.
      Fix that by having two sequence numbers for each serializable transaction,
      one taken before a transaction becomes visible to others, and one after it.
      This is easier than trying to make the the transition totally atomic, which
      would require holding ProcArrayLock and SerializableXactHashLock at the same
      time. By using prepareSeqNo instead of commitSeqNo in a few places where
      commit sequence numbers are compared, we can make those comparisons err on
      the safe side when we don't know for sure which committed first.
      
      Per analysis by Kevin Grittner and Dan Ports, but this approach to fix it
      is different from the original patch.
      406d6183
    • T
      Reclassify replication-related GUC variables as "master" and "standby". · 60a81ad1
      Tom Lane 提交于
      Per discussion, this structure seems more understandable than what was
      there before.  Make config.sgml and postgresql.conf.sample agree.
      
      In passing do a bit of editorial work on the variable descriptions.
      60a81ad1
    • R
      Adjust OLDSERXID_MAX_PAGE based on BLCKSZ. · 5b2b444f
      Robert Haas 提交于
      The value when BLCKSZ = 8192 is unchanged, but with larger-than-normal
      block sizes we might need to crank things back a bit, as we'll have
      more entries per page than normal in that case.
      
      Kevin Grittner
      5b2b444f