1. 21 Aug, 2007 13 commits
  2. 20 Aug, 2007 1 commit
  3. 19 Aug, 2007 3 commits
  4. 16 Aug, 2007 1 commit
  5. 15 Aug, 2007 4 commits
    • Tom Lane's avatar
      Arrange to cache a ResultRelInfo in the executor's EState for relations that · 817946bb
      Tom Lane authored
      are not one of the query's defined result relations, but nonetheless have
      triggers fired against them while the query is active.  This was formerly
      impossible but can now occur because of my recent patch to fix the firing
      order for RI triggers.  Caching a ResultRelInfo avoids duplicating work by
      repeatedly opening and closing the same relation, and also allows EXPLAIN
      ANALYZE to "see" and report on these extra triggers.  Use the same mechanism
      to cache open relations when firing deferred triggers at transaction shutdown;
      this replaces the former one-element-cache strategy used in that case, and
      should improve performance a bit when there are deferred triggers on a number
      of relations.
      817946bb
    • Tom Lane's avatar
      Repair problems occurring when multiple RI updates have to be done to the same · 9cb84097
      Tom Lane authored
      row within one query: we were firing check triggers before all the updates
      were done, leading to bogus failures.  Fix by making the triggers queued by
      an RI update go at the end of the outer query's trigger event list, thereby
      effectively making the processing "breadth-first".  This was indeed how it
      worked pre-8.0, so the bug does not occur in the 7.x branches.
      Per report from Pavel Stehule.
      9cb84097
    • Bruce Momjian's avatar
      Add third idea about pulling data from indexes. · 5ff95e6b
      Bruce Momjian authored
      >   A third idea would be for a heap scan to check if all rows are visible
      >   and if so set a per-table flag which can be checked by index scans.
      >   Any change to the table would have to clear the flag.  To detect
      >   changes during the heap scan a counter could be set at the start and
      >   checked at the end --- if it is the same, the table has not been
      >   modified --- any table change would increment the counter.
      5ff95e6b
    • Bruce Momjian's avatar
      Fix whitespace in TODO. · 811f91cf
      Bruce Momjian authored
      811f91cf
  6. 14 Aug, 2007 8 commits
  7. 13 Aug, 2007 3 commits
    • Tom Lane's avatar
      TEMPORARILY make synchronous_commit default to OFF, so that we can get more · b83bd31b
      Tom Lane authored
      thorough testing of async-commit mode from the buildfarm.  This patch MUST
      get reverted before 8.3 release!
      b83bd31b
    • Tom Lane's avatar
      Fix two bugs induced in VACUUM FULL by async-commit patch. · 647fd9a1
      Tom Lane authored
      First, we cannot assume that XLogAsyncCommitFlush guarantees hint bits will be
      settable, because clog.c's inexact LSN bookkeeping results in windows where a
      previously flushed transaction is considered unhintable because it shares an
      LSN slot with a later unflushed transaction.  But repair_frag requires
      XMIN_COMMITTED to be correct so that it can distinguish tuples moved by the
      current vacuum.  Since not being able to set the bit is an uncommon corner
      case, the most practical way of dealing with it seems to be to abandon
      shrinking (ie, don't invoke repair_frag) when we find a non-dead tuple whose
      XMIN_COMMITTED bit couldn't be set.
      
      Second, it is possible for the same reason that a RECENTLY_DEAD tuple does not
      get its XMAX_COMMITTED bit set during scan_heap.  But by the time repair_frag
      examines the tuple it might be possible to set the bit.  We therefore must
      take buffer content lock when calling HeapTupleSatisfiesVacuum a second time,
      else we can get an Assert failure in SetBufferCommitInfoNeedsSave.  This
      latter bug is latent in existing releases, but I think it cannot actually
      occur without async commit, since the first HeapTupleSatisfiesVacuum call
      should always have set the bit.  So I'm not going to back-patch it.
      
      In passing, reduce the existing "cannot shrink relation" messages from NOTICE
      to LOG level.  The new message must be no higher than LOG if we don't want
      unpredictable regression test failures, and consistency seems like a good
      idea.  Also arrange that only one such message is reported per VACUUM FULL;
      in typical scenarios you could get spammed with many such messages, which
      seems a bit useless.
      647fd9a1
    • Tom Lane's avatar
      Document that the regexp split functions ignore zero-length matches in · a44af6df
      Tom Lane authored
      certain corner cases.  Per discussion, the code does what we want, but
      it really needs to be documented that these functions act differently
      from regexp_matches.
      a44af6df
  8. 12 Aug, 2007 2 commits
    • Tom Lane's avatar
      Remove an "optimization" I installed in 2001, to make repalloc() attempt to · b70d4a62
      Tom Lane authored
      enlarge the memory chunk in-place when it was feasible to do so.  This turns
      out to not work well at all for scenarios involving repeated cycles of
      palloc/repalloc/pfree: the eventually freed chunks go into the wrong freelist
      for the next initial palloc request, and so we consume memory indefinitely.
      While that could be defended against, the number of cases where the
      optimization can still be applied drops significantly, and adjusting the
      initial sizes of StringInfo buffers makes it drop to almost nothing.
      Seems better to just remove the extra complexity.
      Per recent discussion and testing.
      b70d4a62
    • Tom Lane's avatar
      Increase the initial size of StringInfo buffers to 1024 bytes (from 256); · 70868c01
      Tom Lane authored
      likewise increase the initial size of the scanner's literal buffer to 1024
      (from 128).  Instrumentation of the regression tests suggests that this
      saves a useful amount of repalloc() traffic --- the number of calls occurring
      during one set of tests drops from about 6900 to about 3900.  The old sizes
      were chosen in the late 90's with an eye to machines much smaller than
      are common today.
      70868c01
  9. 11 Aug, 2007 2 commits
    • Tom Lane's avatar
      Avoid memory leakage across successive calls of regexp_matches() or · ae65ca31
      Tom Lane authored
      regexp_split_to_table() within a single query.  This is only a partial
      solution, as it turns out that with enough matches per string these
      functions can also tickle a repalloc() misbehavior.  But fixing that
      is a topic for a separate patch.
      ae65ca31
    • Tom Lane's avatar
      Code review for regexp_matches/regexp_split patch. Refactor to avoid assuming · 1b706193
      Tom Lane authored
      that cached compiled patterns will still be there when the function is next
      called.  Clean up looping logic, thereby fixing bug identified by Pavel
      Stehule.  Share setup code between the two functions, add some comments, and
      avoid risky mixing of int and size_t variables.  Clean up the documentation a
      tad, and accept all the flag characters mentioned in table 9-19 rather than
      just a subset.
      1b706193
  10. 10 Aug, 2007 2 commits
  11. 09 Aug, 2007 1 commit