1. 13 11月, 2009 2 次提交
  2. 12 11月, 2009 8 次提交
  3. 11 11月, 2009 4 次提交
    • T
      Do not build psql's flex module on its own, but instead include it in · 90bfe999
      Tom Lane 提交于
      mainloop.c.  This ensures that postgres_fe.h is read before including
      any system headers, which is necessary to avoid problems on some platforms
      where we make nondefault selections of feature macros for stdio.h or
      other headers.  We have had this policy for flex modules in the backend
      for many years, but for some reason it was not applied to psql.
      Per trouble report from Alexandra Roy and diagnosis by Albe Laurenz.
      90bfe999
    • T
      Revert the temporary patch to work around Snow Leopard readdir() bug. · 21e3edd6
      Tom Lane 提交于
      Apple has fixed that bug in 10.6.2, and we should encourage users to
      update to that version rather than trusting this cosmetic patch.
      As was recently noted by Stephen Tyler, this patch was only masking
      the problem in the context of DROP TABLESPACE, but the failure could
      occur in other places such as pg_xlog cleanup.
      21e3edd6
    • B
      interval_abs(): · 089f4b92
      Bruce Momjian 提交于
      Add C comment about why there is no interval_abs():  it is unclear what
      value to return:
      
          http://archives.postgresql.org/pgsql-general/2009-10/msg01031.php
          http://archives.postgresql.org/pgsql-general/2009-11/msg00041.php
      089f4b92
    • A
      Fix longstanding problems in VACUUM caused by untimely interruptions · e7ec0222
      Alvaro Herrera 提交于
      In VACUUM FULL, an interrupt after the initial transaction has been recorded
      as committed can cause postmaster to restart with the following error message:
      PANIC: cannot abort transaction NNNN, it was already committed
      This problem has been reported many times.
      
      In lazy VACUUM, an interrupt after the table has been truncated by
      lazy_truncate_heap causes other backends' relcache to still point to the
      removed pages; this can cause future INSERT and UPDATE queries to error out
      with the following error message:
      could not read block XX of relation 1663/NNN/MMMM: read only 0 of 8192 bytes
      The window to this race condition is extremely narrow, but it has been seen in
      the wild involving a cancelled autovacuum process.
      
      The solution for both problems is to inhibit interrupts in both operations
      until after the respective transactions have been committed.  It's not a
      complete solution, because the transaction could theoretically be aborted by
      some other error, but at least fixes the most common causes of both problems.
      e7ec0222
  4. 10 11月, 2009 4 次提交
    • B
      DIAGNOSTICS/FOUND wording · b538b72e
      Bruce Momjian 提交于
      Update wording of GET DIAGNOSTICS/FOUND, per David Fetter.
      b538b72e
    • T
      More incremental refactoring in plpgsql: get rid of gram.y dependencies on · 73a2f6c6
      Tom Lane 提交于
      yytext.  This is a necessary change if we're going to have a lexer interface
      layer that does lookahead, since yytext won't necessarily be in step with
      what the grammar thinks is the current token.  yylval and yylloc should
      be the only side-variables that we need to manage when doing lookahead.
      73a2f6c6
    • B
      PL/pgSQL FOUND · 6ac697f1
      Bruce Momjian 提交于
      Document that GET DIAGNOSTICS is affected by EXECUTE, while FOUND is
      not.
      6ac697f1
    • T
      Re-refactor the core scanner's API, in order to get out from under the problem · 10bcfa18
      Tom Lane 提交于
      of different parsers having different YYSTYPE unions that they want to use
      with it.  I defined a new union core_YYSTYPE that is just the (very short)
      list of semantic values returned by the core scanner.  I had originally
      worried that this would require an extra interface layer, but actually we can
      have parser.c's base_yylex (formerly filtered_base_yylex) take care of that at
      no extra cost.  Names associated with the core scanner are now "core_yy_foo",
      with "base_yy_foo" being used in the core Bison parser and the parser.c
      interface layer.
      
      This solves the last serious stumbling block to eliminating plpgsql's separate
      lexer.  One restriction that will still be present is that plpgsql and the
      core will have to agree on the token numbers assigned to tokens that can be
      returned by the core lexer.  Since Bison doesn't seem willing to accept
      external assignments of those numbers, we'll have to live with decreeing that
      core and plpgsql grammars declare these tokens first and in the same order.
      10bcfa18
  5. 09 11月, 2009 2 次提交
    • T
      Fix WHERE CURRENT OF to work as designed within plpgsql. The argument · 2ace38d2
      Tom Lane 提交于
      can be the name of a plpgsql cursor variable, which formerly was converted
      to $N before the core parser saw it, but that's no longer the case.
      Deal with plain name references to plpgsql variables, and add a regression
      test case that exposes the failure.
      2ace38d2
    • T
      Modernize plpgsql's handling of parse locations, making it look a lot more · 39bd3fd1
      Tom Lane 提交于
      like the core parser's code.  In particular, track locations at the character
      rather than line level during parsing, allowing many more parse-time error
      conditions to be reported with precise error pointers rather than just
      "near line N".
      
      Also, exploit the fact that we no longer need to substitute $N for variable
      references by making extracted SQL queries and expressions be exact copies
      of subranges of the function text, rather than having random whitespace
      changes within them.  This makes it possible to directly map parse error
      positions from the core parser onto positions in the function text, which
      lets us report them without the previous kluge of showing the intermediate
      internal-query form.  (Later it might be good to do that for core
      parse-analysis errors too, but this patch is just touching plpgsql's
      lexer/parser, not what happens at runtime.)
      
      In passing, make plpgsql's lexer use palloc not malloc.
      
      These changes make plpgsql's parse-time error reports noticeably nicer
      (as illustrated by the regression test changes), and will also simplify
      the planned removal of plpgsql's separate lexer by reducing the impedance
      mismatch between what it does and what the core lexer does.
      39bd3fd1
  6. 08 11月, 2009 1 次提交
  7. 07 11月, 2009 3 次提交
    • T
      Rearrange plpgsql parsing to simplify and speed it up a bit. · f2b7692e
      Tom Lane 提交于
      * Pull the responsibility for %TYPE and %ROWTYPE out of the scanner,
      letting read_datatype manage it instead.
      
      * Avoid unnecessary scanner-driven lookups of plpgsql variables in
      places where it's not needed, which is actually most of the time;
      we do not need it in DECLARE sections nor in text that is a SQL
      query or expression.
      
      * Rationalize the set of token types returned by the scanner:
      distinguishing T_SCALAR, T_RECORD, T_ROW seems to complicate the grammar
      in more places than it simplifies it, so merge these into one
      token type T_DATUM; but split T_ERROR into T_DBLWORD and T_TRIPWORD
      for clarity and simplicity of later processing.
      
      Some of this will need to be revisited again when we try to make
      plpgsql use the core scanner, but this patch gets some of the bigger
      stumbling blocks out of the way.
      f2b7692e
    • A
      Keep track of language's trusted flag in InlineCodeBlock. Needed to support DO... · b79f49c7
      Andrew Dunstan 提交于
      Keep track of language's trusted flag in InlineCodeBlock. Needed to support DO blocks for languages that have both trusted and untrusted variants.
      b79f49c7
    • T
      Change plpgsql from using textual substitution to insert variable references · 0772f1e5
      Tom Lane 提交于
      into SQL expressions, to using the newly added parser callback hooks.
      
      This allows us to do the substitutions in a more semantically-aware way:
      a variable reference will only be recognized where it can validly go,
      ie, a place where a column value or parameter would be legal, instead of
      the former behavior that would replace any textual match including
      table names and column aliases (leading to syntax errors later on).
      A release-note-worthy fine point is that plpgsql variable names that match
      fully-reserved words will now need to be quoted.
      
      This commit preserves the former behavior that variable references take
      precedence over any possible match to a column name.  The infrastructure
      is in place to support the reverse precedence or throwing an error on
      ambiguity, but those behaviors aren't accessible yet.
      
      Most of the code changes here are associated with making the namespace
      data structure persist so that it can be consulted at runtime, instead
      of throwing it away at the end of initial function parsing.
      
      The plpgsql scanner is still doing name lookups, but that behavior is
      now irrelevant for SQL expressions.  A future commit will deal with
      removing unnecessary lookups.
      0772f1e5
  8. 06 11月, 2009 3 次提交
  9. 05 11月, 2009 4 次提交
  10. 04 11月, 2009 3 次提交
  11. 03 11月, 2009 4 次提交
    • P
      Fix regression tests for psql \d view patch · 16cd34a4
      Peter Eisentraut 提交于
      16cd34a4
    • P
      Improve PL/Python elog output · 2e3b16c8
      Peter Eisentraut 提交于
      When the elog functions (plpy.info etc.) get a single argument, just print
      that argument instead of printing the single-member tuple like ('foo',).
      2e3b16c8
    • P
      In psql, show view definition only with \d+, not with \d · 2fe1b4dd
      Peter Eisentraut 提交于
      The rationale is that view definitions tend to be long and obscure the
      main information about the view.
      2fe1b4dd
    • P
      Fix obscure segfault condition in PL/Python · 9e411146
      Peter Eisentraut 提交于
      In PLy_output(), when the elog() call in the TRY branch throws an exception
      (this can happen when a statement timeout kicks in, for example), the
      PyErr_SetString() call in the CATCH branch can cause a segfault, because the
      Py_XDECREF(so) call before it releases memory that is still used by the sv
      variable that PyErr_SetString() uses as argument, because sv points into
      memory owned by so.
      
      Backpatched back to 8.0, where this code was introduced.
      
      I also threw in a couple of volatile declarations for variables that are used
      before and after the TRY.  I don't think they caused the crash that I
      observed, but they could become issues.
      9e411146
  12. 02 11月, 2009 2 次提交
    • T
      Dept of second thoughts: after studying index_getnext() a bit more I realize · 7d535ebe
      Tom Lane 提交于
      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
    • T
      Fix two serious bugs introduced into hash indexes by the 8.4 patch that made · c4afdca4
      Tom Lane 提交于
      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