1. 15 7月, 2011 1 次提交
  2. 14 7月, 2011 3 次提交
  3. 13 7月, 2011 4 次提交
    • B
      Use clearer woring for pg_locks columns, identifying which items are · 80a1d169
      Bruce Momjian 提交于
      related to lock objects.
      80a1d169
    • 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
  4. 12 7月, 2011 3 次提交
  5. 11 7月, 2011 2 次提交
  6. 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
  7. 08 7月, 2011 12 次提交
    • 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
      7544064b
    • P
      Message style improvements · f05c6509
      Peter Eisentraut 提交于
      f05c6509
    • T
      Update examples for string-related functions. · c59b8ba6
      Tom Lane 提交于
      In the example for decode(), show the bytea result in hex format,
      since that's now the default.  Use an E'' string in the example for
      quote_literal(), so that it works regardless of the
      standard_conforming_strings setting.  On the functions-for-binary-strings
      page, leave the examples as-is for readability, but add a note pointing out
      that they are shown in escape format.  Per comments from Thom Brown.
      
      Also, improve the description for encode() and decode() a tad.
      
      Backpatch to 9.0, where bytea_output was introduced.
      c59b8ba6
    • T
      997d5b48
    • 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
    • P
      Fix use of unportable %m format · d7fb4931
      Peter Eisentraut 提交于
      d7fb4931
    • 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
    • T
      Finish disabling reduced-lock-levels-for-DDL feature. · a195e3c3
      Tom Lane 提交于
      Previous patch only covered the ALTER TABLE changes, not changes in other
      commands; and it neglected to revert the documentation changes.
      a195e3c3
  8. 07 7月, 2011 4 次提交
    • H
      Fix a bug with SSI and prepared transactions: · 928408d9
      Heikki Linnakangas 提交于
      If there's a dangerous structure T0 ---> T1 ---> T2, and T2 commits first,
      we need to abort something. If T2 commits before both conflicts appear,
      then it should be caught by OnConflict_CheckForSerializationFailure. If
      both conflicts appear before T2 commits, it should be caught by
      PreCommit_CheckForSerializationFailure. But that is actually run when
      T2 *prepares*. Fix that in OnConflict_CheckForSerializationFailure, by
      treating a prepared T2 as if it committed already.
      
      This is mostly a problem for prepared transactions, which are in prepared
      state for some time, but also for regular transactions because they also go
      through the prepared state in the SSI code for a short moment when they're
      committed.
      
      Kevin Grittner and Dan Ports
      928408d9
    • A
      Fix comments over eagerly c&p'd. · b2e3be41
      Andrew Dunstan 提交于
      b2e3be41
    • A
      Reimplement pgbison and pgflex as perl scripts instead of bat files. · c895e775
      Andrew Dunstan 提交于
      In the process, remove almost all knowledge of individual .y and .l files,
      and instead get invocation settings from the relevant make files.
      The exception is plpgsql's gram.y, which has a target with a different
      name. It is hoped that this will make the scripts more future-proof,
      so that they won't require adjustment every time we add a new .l or .y
      file.
      
      The logic is also notably less tortured than that forced on us
      by the idiosyncrasies of the Windows command processor.
      
      The .bat files are kept as thin wrappers for the perl scripts.
      c895e775
    • T
      Remove assumptions that not-equals operators cannot be in any opclass. · 14f67192
      Tom Lane 提交于
      get_op_btree_interpretation assumed this in order to save some duplication
      of code, but it's not true in general anymore because we added <> support
      to btree_gist.  (We still assume it for btree opclasses, though.)
      
      Also, essentially the same logic was baked into predtest.c.  Get rid of
      that duplication by generalizing get_op_btree_interpretation so that it
      can be used by predtest.c.
      
      Per bug report from Denis de Bernardy and investigation by Jeff Davis,
      though I didn't use Jeff's patch exactly as-is.
      
      Back-patch to 9.1; we do not support this usage before that.
      14f67192
  9. 06 7月, 2011 9 次提交