1. 04 Nov, 2009 2 commits
  2. 03 Nov, 2009 5 commits
  3. 01 Nov, 2009 2 commits
    • Tom Lane's avatar
      Dept of second thoughts: after studying index_getnext() a bit more I realize · 7d535ebe
      Tom Lane authored
      that it can scribble on scan->xs_ctup.t_self while following HOT chains,
      so we can't rely on that to stay valid between hashgettuple() calls.
      Introduce a private variable in HashScanOpaque, instead.
      7d535ebe
    • Tom Lane's avatar
      Fix two serious bugs introduced into hash indexes by the 8.4 patch that made · c4afdca4
      Tom Lane authored
      hash indexes keep entries sorted by hash value.  First, the original plans for
      concurrency assumed that insertions would happen only at the end of a page,
      which is no longer true; this could cause scans to transiently fail to find
      index entries in the presence of concurrent insertions.  We can compensate
      by teaching scans to re-find their position after re-acquiring read locks.
      Second, neither the bucket split nor the bucket compaction logic had been
      fixed to preserve hashvalue ordering, so application of either of those
      processes could lead to permanent corruption of an index, in the sense
      that searches might fail to find entries that are present.
      
      This patch fixes the split and compaction logic to preserve hashvalue
      ordering, but it cannot do anything about pre-existing corruption.  We will
      need to recommend reindexing all hash indexes in the 8.4.2 release notes.
      
      To buy back the performance loss hereby induced in split and compaction,
      fix them to use PageIndexMultiDelete instead of retail PageIndexDelete
      operations.  We might later want to do something with qsort'ing the
      page contents rather than doing a binary search for each insertion,
      but that seemed more invasive than I cared to risk in a back-patch.
      
      Per bug #5157 from Jeff Janes and subsequent investigation.
      c4afdca4
  4. 31 Oct, 2009 2 commits
    • Tom Lane's avatar
      Ensure the previous Perl interpreter selection is restored upon exit from · ef59fa04
      Tom Lane authored
      plperl_call_handler, in both the normal and error-exit paths.  Per report
      from Alexey Klyukin.
      ef59fa04
    • Tom Lane's avatar
      Implement parser hooks for processing ColumnRef and ParamRef nodes, as per my · fb5d0580
      Tom Lane authored
      recent proposal.  As proof of concept, remove knowledge of Params from the
      core parser, arranging for them to be handled entirely by parser hook
      functions.  It turns out we need an additional hook for that --- I had
      forgotten about the code that handles inferring a parameter's type from
      context.
      
      This is a preliminary step towards letting plpgsql handle its variables
      through parser hooks.  Additional work remains to be done to expose the
      facility through SPI, but I think this is all the changes needed in the core
      parser.
      fb5d0580
  5. 30 Oct, 2009 1 commit
    • Tom Lane's avatar
      Make the overflow guards in ExecChooseHashTableSize be more protective. · 8442317b
      Tom Lane authored
      The original coding ensured nbuckets and nbatch didn't exceed INT_MAX,
      which while not insane on its own terms did nothing to protect subsequent
      code like "palloc(nbatch * sizeof(BufFile *))".  Since enormous join size
      estimates might well be planner error rather than reality, it seems best
      to constrain the initial sizes to be not more than work_mem/sizeof(pointer),
      thus ensuring the allocated arrays don't exceed work_mem.  We will allow
      nbatch to get bigger than that during subsequent ExecHashIncreaseNumBatches
      calls, but we should still guard against integer overflow in those palloc
      requests.  Per bug #5145 from Bernt Marius Johnsen.
      
      Although the given test case only seems to fail back to 8.2, previous
      releases have variants of this issue, so patch all supported branches.
      8442317b
  6. 29 Oct, 2009 1 commit
  7. 28 Oct, 2009 4 commits
  8. 27 Oct, 2009 3 commits
    • Tom Lane's avatar
      Fix AfterTriggerSaveEvent to use a test and elog, not just Assert, to check · 44956c52
      Tom Lane authored
      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
    • Tom Lane's avatar
      Make FOR UPDATE/SHARE in the primary query not propagate into WITH queries; · 61e53282
      Tom Lane authored
      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
    • Alvaro Herrera's avatar
      Fix documentation on the toast.fillfactor reloption: it doesn't exist. · b091b976
      Alvaro Herrera authored
      Per note from Zoltan Boszormenyi.
      b091b976
  9. 26 Oct, 2009 4 commits
    • Peter Eisentraut's avatar
      f1c52475
    • Peter Eisentraut's avatar
      Check errors in for loop · 3ceae479
      Peter Eisentraut authored
      3ceae479
    • Heikki Linnakangas's avatar
      Fix range check in date_recv that tried to limit accepted values to only · 2078e384
      Heikki Linnakangas authored
      those accepted by date_in(). I confused julian day numbers and number of
      days since the postgres epoch 2000-01-01 in the original patch.
      
      I just noticed that it's still easy to get such out-of-range values into
      the database using to_date or +- operators, but this patch doesn't do
      anything about those functions.
      
      Per report from James Pye.
      2078e384
    • Tom Lane's avatar
      Re-implement EvalPlanQual processing to improve its performance and eliminate · 9f2ee8f2
      Tom Lane authored
      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
  10. 23 Oct, 2009 1 commit
  11. 21 Oct, 2009 3 commits
  12. 20 Oct, 2009 3 commits
  13. 17 Oct, 2009 2 commits
  14. 16 Oct, 2009 2 commits
    • Tom Lane's avatar
      Rewrite pam_passwd_conv_proc to be more robust: avoid assuming that the · 76c09dbe
      Tom Lane authored
      pam_message array contains exactly one PAM_PROMPT_ECHO_OFF message.
      Instead, deal with however many messages there are, and don't throw error
      for PAM_ERROR_MSG and PAM_TEXT_INFO messages.  This logic is borrowed from
      openssh 5.2p1, which hopefully has seen more real-world PAM usage than we
      have.  Per bug #5121 from Ryan Douglas, which turned out to be caused by
      the conv_proc being called with zero messages.  Apparently that is normal
      behavior given the combination of Linux pam_krb5 with MS Active Directory
      as the domain controller.
      
      Patch all the way back, since this code has been essentially untouched
      since 7.4.  (Surprising we've not heard complaints before.)
      76c09dbe
    • Heikki Linnakangas's avatar
      FREEZE and VERBOSE options were in wrong order in the VACUUM command that · c02350dc
      Heikki Linnakangas authored
      vacuumdb produces. Per report by Thom Brown.
      c02350dc
  15. 15 Oct, 2009 2 commits
  16. 14 Oct, 2009 3 commits