1. 01 Nov, 2011 5 commits
  2. 31 Oct, 2011 1 commit
    • Tom Lane's avatar
      Stop btree indexscans upon reaching nulls in either direction. · 6980f817
      Tom Lane authored
      The existing scan-direction-sensitive tests were overly complex, and
      failed to stop the scan in cases where it's perfectly legitimate to do so.
      Per bug #6278 from Maksym Boguk.
      
      Back-patch to 8.3, which is as far back as the patch applies easily.
      Doesn't seem worth sweating over a relatively minor performance issue in
      8.2 at this late date.  (But note that this was a performance regression
      from 8.1 and before, so 8.2 is being left as an outlier.)
      6980f817
  3. 30 Oct, 2011 2 commits
    • Tom Lane's avatar
      Support more locale-specific formatting options in cash_out(). · 6743a878
      Tom Lane authored
      The POSIX spec defines locale fields for controlling the ordering of the
      value, sign, and currency symbol in monetary output, but cash_out only
      supported a small subset of these options.  Fully implement p/n_sign_posn,
      p/n_cs_precedes, and p/n_sep_by_space per spec.  Fix up cash_in so that
      it will accept all these format variants.
      
      Also, make sure that thousands_sep is only inserted to the left of the
      decimal point, as required by spec.
      
      Per bug #6144 from Eduard Kracmar and discussion of bug #6277.  This patch
      includes some ideas from Alexander Lakhin's proposed patch, though it is
      very different in detail.
      6743a878
    • Tom Lane's avatar
      Further improvement of make_greater_string. · eb5834d5
      Tom Lane authored
      Make sure that it considers all the possibilities that the old code did,
      instead of trying only one possibility per character position.  To keep the
      runtime in bounds, instead tweak the character incrementers to not try
      every possible multibyte character code.  Remove unnecessary logic to
      restore the old character value on failure.  Additional comment and
      formatting cleanup.
      eb5834d5
  4. 29 Oct, 2011 4 commits
    • Robert Haas's avatar
      Update visibilitymap.c header comments. · fae54e4a
      Robert Haas authored
      Recent work on index-only scans left this somewhat out of date.
      fae54e4a
    • Tom Lane's avatar
      Fix assorted bogosities in cash_in() and cash_out(). · 7609239f
      Tom Lane authored
      cash_out failed to handle multiple-byte thousands separators, as per bug
      #6277 from Alexander Law.  In addition, cash_in didn't handle that either,
      nor could it handle multiple-byte positive_sign.  Both routines failed to
      support multiple-byte mon_decimal_point, which I did not think was worth
      changing, but at least now they check for the possibility and fall back to
      using '.' rather than emitting invalid output.  Also, make cash_in handle
      trailing negative signs, which formerly it would reject.  Since cash_out
      generates trailing negative signs whenever the locale tells it to, this
      last omission represents a fail-to-reload-dumped-data bug.  IMO that
      justifies patching this all the way back.
      7609239f
    • Robert Haas's avatar
      Improve make_greater_string() with encoding-specific incrementers. · 78d523b6
      Robert Haas authored
      This infrastructure doesn't in any way guarantee that the character
      we produce will sort before the one we incremented; but it does at least
      make it much more likely that we'll end up with something that is a valid
      character, which improves our chances.
      
      Kyotaro Horiguchi, with various adjustments by me.
      78d523b6
    • Bruce Momjian's avatar
      Remove pg_upgrade dependency on the 'postgres' database existing in the · 51eba98c
      Bruce Momjian authored
      new cluster.   vacuumdb, used by pg_upgrade, still has this dependency.
      51eba98c
  5. 28 Oct, 2011 9 commits
  6. 27 Oct, 2011 3 commits
    • Heikki Linnakangas's avatar
      Fix the number of lwlocks needed by the "fast path" lock patch. It needs · cbf65509
      Heikki Linnakangas authored
      one lock per backend or auxiliary process - the need for a lock for each
      aux processes was not accounted for in NumLWLocks(). No-one noticed,
      because the three locks needed for the three aux processes fit into the
      few extra lwlocks we allocate for 3rd party modules that don't call
      RequestAddinLWLocks() (NUM_USER_DEFINED_LWLOCKS, 4 by default).
      cbf65509
    • Tom Lane's avatar
      Avoid recursion while processing ELSIF lists in plpgsql. · 051d1ba7
      Tom Lane authored
      The original implementation of ELSIF in plpgsql converted the construct
      into nested simple IF statements.  This was prone to stack overflow with
      long ELSIF lists, in two different ways.  First, it's difficult to generate
      the parsetree without using right-recursion in the bison grammar, and
      that's prone to parser stack overflow since nothing can be reduced until
      the whole list has been read.  Second, we'd recurse during execution, thus
      creating an unnecessary risk of execution-time stack overflow.  Rewrite
      so that the ELSIF list is represented as a flat list, scanned via iteration
      not recursion, and generated through left-recursion in the grammar.
      Per a gripe from Håvard Kongsgård.
      051d1ba7
    • Tom Lane's avatar
      Add simple script to check for right recursion in Bison grammars. · 756a4ed5
      Tom Lane authored
      We should generally use left-recursion not right-recursion to parse lists.
      Bison hasn't got any built-in way to check for this type of inefficiency,
      and I didn't find anything on the net in a quick search, so I wrote a
      little Perl script to do it.  Add to src/tools/ so we don't have to
      re-invent this wheel next time we wonder if we're doing anything stupid.
      
      Currently, the only place that seems to need fixing is plpgsql's stmt_else
      production, so the problem doesn't appear to be common enough to warrant
      trying to include such a test in our standard build process.  If we did
      want to do that, we'd need a way to ignore some false positives, such as
      a_expr := '-' a_expr
      756a4ed5
  7. 26 Oct, 2011 7 commits
    • Tom Lane's avatar
      Typo fixes. · bf820136
      Tom Lane authored
      expect -> except, noted by Andrew Dunstan.  Also, "cannot" seems more
      readable here than "can not", per David Wheeler.
      bf820136
    • Tom Lane's avatar
      Improve planner's ability to recognize cases where an IN's RHS is unique. · 3e4b3465
      Tom Lane authored
      If the right-hand side of a semijoin is unique, then we can treat it like a
      normal join (or another way to say that is: we don't need to explicitly
      unique-ify the data before doing it as a normal join).  We were recognizing
      such cases when the RHS was a sub-query with appropriate DISTINCT or GROUP
      BY decoration, but there's another way: if the RHS is a plain relation with
      unique indexes, we can check if any of the indexes prove the output is
      unique.  Most of the infrastructure for that was there already in the join
      removal code, though I had to rearrange it a bit.  Per reflection about a
      recent example in pgsql-performance.
      3e4b3465
    • Bruce Momjian's avatar
      Fix pg_bsd_indent bug where newlines were not being trimmed from typedef · 360429e1
      Bruce Momjian authored
      lines.  Update pg_bsd_indent required version to 1.1 (and update ftp
      site).
      
      Problem reported by Magnus.
      360429e1
    • Magnus Hagander's avatar
      Implement streaming xlog for backup tools · d9bae531
      Magnus Hagander authored
      Add option for parallel streaming of the transaction log while a
      base backup is running, to get the logfiles before the server has
      removed them.
      
      Also add a tool called pg_receivexlog, which streams the transaction
      log into files, creating a log archive without having to wait for
      segments to complete, thus decreasing the window of data loss without
      having to waste space using archive_timeout. This works best in
      combination with archive_command - suggested usage docs etc coming later.
      d9bae531
    • Magnus Hagander's avatar
      MingW doesn't support wcstombs_s()... · 2b64f3f1
      Magnus Hagander authored
      2b64f3f1
    • Tom Lane's avatar
      Change FK trigger naming convention to fix self-referential FKs. · 1e3b21dd
      Tom Lane authored
      Use names like "RI_ConstraintTrigger_a_NNNN" for FK action triggers and
      "RI_ConstraintTrigger_c_NNNN" for FK check triggers.  This ensures the
      action trigger fires first in self-referential cases where the very same
      row update fires both an action and a check trigger.  This change provides
      a non-probabilistic solution for bug #6268, at the risk that it could break
      client code that is making assumptions about the exact names assigned to
      auto-generated FK triggers.  Hence, change this in HEAD only.  No need for
      forced initdb since old triggers continue to work fine.
      1e3b21dd
    • Tom Lane's avatar
      Change FK trigger creation order to better support self-referential FKs. · 58958726
      Tom Lane authored
      When a foreign-key constraint references another column of the same table,
      row updates will queue both the PK's ON UPDATE action and the FK's CHECK
      action in the same event.  The ON UPDATE action must execute first, else
      the CHECK will check a non-final state of the row and possibly throw an
      inappropriate error, as seen in bug #6268 from Roman Lytovchenko.
      
      Now, the firing order of multiple triggers for the same event is determined
      by the sort order of their pg_trigger.tgnames, and the auto-generated names
      we use for FK triggers are "RI_ConstraintTrigger_NNNN" where NNNN is the
      trigger OID.  So most of the time the firing order is the same as creation
      order, and so rearranging the creation order fixes it.
      
      This patch will fail to fix the problem if the OID counter wraps around or
      adds a decimal digit (eg, from 99999 to 100000) while we are creating the
      triggers for an FK constraint.  Given the small odds of that, and the low
      usage of self-referential FKs, we'll live with that solution in the back
      branches.  A better fix is to change the auto-generated names for FK
      triggers, but it seems unwise to do that in stable branches because there
      may be client code that depends on the naming convention.  We'll fix it
      that way in HEAD in a separate patch.
      
      Back-patch to all supported branches, since this bug has existed for a long
      time.
      58958726
  8. 25 Oct, 2011 5 commits
  9. 24 Oct, 2011 1 commit
  10. 23 Oct, 2011 3 commits
    • Tom Lane's avatar
      Make psql support tab completion of EXECUTE <prepared-statement-name>. · 8140c1bc
      Tom Lane authored
      Andreas Karlsson, reviewed by Josh Kupershmidt
      8140c1bc
    • Tom Lane's avatar
      Improve git_changelog's handling of inconsistent commit orderings. · 7299778a
      Tom Lane authored
      Use the CommitDate not the AuthorDate, as the former is representative of
      the order in which things went into the main repository, and the latter
      isn't very; we now have instances where the AuthorDate is as much as a
      month before the patch really went in.  Also, get rid of the "commit order
      inversions" heuristic, which turns out not to do anything very desirable.
      Instead we just print commits in strict timestamp order, interpreting the
      "timestamp" of a merged commit as its timestamp on the newest branch it
      appears in.  This fixes some cases where very ancient commits were being
      printed relatively early in the report.
      7299778a
    • Tom Lane's avatar
      Don't trust deferred-unique indexes for join removal. · 0f39d505
      Tom Lane authored
      The uniqueness condition might fail to hold intra-transaction, and assuming
      it does can give incorrect query results.  Per report from Marti Raudsepp,
      though this is not his proposed patch.
      
      Back-patch to 9.0, where both these features were introduced.  In the
      released branches, add the new IndexOptInfo field to the end of the struct,
      to try to minimize ABI breakage for third-party code that may be examining
      that struct.
      0f39d505