1. 08 Nov, 2011 3 commits
    • Peter Eisentraut's avatar
      6477d667
    • Robert Haas's avatar
      Remove hstore's text => text operator. · b60653bc
      Robert Haas authored
      Since PostgreSQL 9.0, we've emitted a warning message when an operator
      named => is created, because the SQL standard now reserves that token
      for another use.  But we've also shipped such an operator with hstore.
      Use of the function hstore(text, text) has been recommended in
      preference to =>(text, text).  Per discussion, it's now time to take
      the next step and stop shipping the operator.  This will allow us to
      prohibit the use of => as an operator name in a future release if and
      when we wish to support the SQL standard use of this token.
      
      The release notes should mention this incompatibility.
      
      Patch by me, reviewed by David Wheeler, Dimitri Fontaine and Tom Lane.
      b60653bc
    • Robert Haas's avatar
      Make VACUUM avoid waiting for a cleanup lock, where possible. · bbb6e559
      Robert Haas authored
      In a regular VACUUM, it's OK to skip pages for which a cleanup lock
      isn't immediately available; the next VACUUM will deal with them.  If
      we're scanning the entire relation to advance relfrozenxid, we might
      need to wait, but only if there are tuples on the page that actually
      require freezing.  These changes should greatly reduce the incidence
      of of vacuum processes getting "stuck".
      
      Simon Riggs and Robert Haas
      bbb6e559
  2. 07 Nov, 2011 4 commits
  3. 06 Nov, 2011 2 commits
  4. 05 Nov, 2011 4 commits
    • Magnus Hagander's avatar
      Update regression tests for \d+ modification · 3a6e4076
      Magnus Hagander authored
      Noted by Tom
      3a6e4076
    • Magnus Hagander's avatar
      ebcadba2
    • Magnus Hagander's avatar
    • Tom Lane's avatar
      Don't assume that a tuple's header size is unchanged during toasting. · 039680af
      Tom Lane authored
      This assumption can be wrong when the toaster is passed a raw on-disk
      tuple, because the tuple might pre-date an ALTER TABLE ADD COLUMN operation
      that added columns without rewriting the table.  In such a case the tuple's
      natts value is smaller than what we expect from the tuple descriptor, and
      so its t_hoff value could be smaller too.  In fact, the tuple might not
      have a null bitmap at all, and yet our current opinion of it is that it
      contains some trailing nulls.
      
      In such a situation, toast_insert_or_update did the wrong thing, because
      to save a few lines of code it would use the old t_hoff value as the offset
      where heap_fill_tuple should start filling data.  This did not leave enough
      room for the new nulls bitmap, with the result that the first few bytes of
      data could be overwritten with null flag bits, as in a recent report from
      Hubert Depesz Lubaczewski.
      
      The particular case reported requires ALTER TABLE ADD COLUMN followed by
      CREATE TABLE AS SELECT * FROM ... or INSERT ... SELECT * FROM ..., and
      further requires that there be some out-of-line toasted fields in one of
      the tuples to be copied; else we'll not reach the troublesome code.
      The problem can only manifest in this form in 8.4 and later, because
      before commit a77eaa6a, CREATE TABLE AS or
      INSERT/SELECT wouldn't result in raw disk tuples getting passed directly
      to heap_insert --- there would always have been at least a junkfilter in
      between, and that would reconstitute the tuple header with an up-to-date
      t_natts and hence t_hoff.  But I'm backpatching the tuptoaster change all
      the way anyway, because I'm not convinced there are no older code paths
      that present a similar risk.
      039680af
  5. 04 Nov, 2011 7 commits
  6. 03 Nov, 2011 12 commits
  7. 02 Nov, 2011 8 commits
    • Tom Lane's avatar
      Avoid scanning nulls at the beginning of a btree index scan. · 1a77f8b6
      Tom Lane authored
      If we have an inequality key that constrains the other end of the index,
      it doesn't directly help us in doing the initial positioning ... but it
      does imply a NOT NULL constraint on the index column.  If the index stores
      nulls at this end, we can use the implied NOT NULL condition for initial
      positioning, just as if it had been stated explicitly.  This avoids wasting
      time when there are a lot of nulls in the column.  This is the reverse of
      the examples given in bugs #6278 and #6283, which were about failing to
      stop early when we encounter nulls at the end of the indexscan.
      1a77f8b6
    • Tom Lane's avatar
      Fix btree stop-at-nulls logic properly. · 882368e8
      Tom Lane authored
      As pointed out by Naoya Anzai, my previous try at this was a few bricks
      shy of a load, because I had forgotten that the initial-positioning logic
      might not try to skip over nulls at the end of the index the scan will
      start from.  We ought to fix that, because it represents an unnecessary
      inefficiency, but first let's get the scan-stop logic back to a safe
      state.  With this patch, we preserve the performance benefit requested
      in bug #6278 for the case of scanning forward into NULLs (in a NULLS
      LAST index), but the reverse case of scanning backward across NULLs
      when there's no suitable initial-positioning qual is still inefficient.
      882368e8
    • Simon Riggs's avatar
    • Simon Riggs's avatar
      Reduce checkpoints and WAL traffic on low activity database server · 18fb9d8d
      Simon Riggs authored
      Previously, we skipped a checkpoint if no WAL had been written since
      last checkpoint, though this does not appear in user documentation.
      As of now, we skip a checkpoint until we have written at least one
      enough WAL to switch the next WAL file. This greatly reduces the
      level of activity and number of WAL messages generated by a very
      low activity server. This is safe because the purpose of a checkpoint
      is to act as a starting place for a recovery, in case of crash.
      This patch maintains minimal WAL volume for replay in case of crash,
      thus maintaining very low crash recovery time.
      18fb9d8d
    • Simon Riggs's avatar
      Refactor xlog.c to create src/backend/postmaster/startup.c · 9aceb6ab
      Simon Riggs authored
      Startup process now has its own dedicated file, just like all other
      special/background processes. Reduces role and size of xlog.c
      9aceb6ab
    • Simon Riggs's avatar
      Derive oldestActiveXid at correct time for Hot Standby. · 86e33648
      Simon Riggs authored
      There was a timing window between when oldestActiveXid was derived
      and when it should have been derived that only shows itself under
      heavy load. Move code around to ensure correct timing of derivation.
      No change to StartupSUBTRANS() code, which is where this failed.
      
      Bug report by Chris Redekop
      86e33648
    • Simon Riggs's avatar
      Start Hot Standby faster when initial snapshot is incomplete. · 10b7c686
      Simon Riggs authored
      If the initial snapshot had overflowed then we can start whenever
      the latest snapshot is empty, not overflowed or as we did already,
      start when the xmin on primary was higher than xmax of our starting
      snapshot, which proves we have full snapshot data.
      
      Bug report by Chris Redekop
      10b7c686
    • Simon Riggs's avatar