1. 02 1月, 2011 5 次提交
  2. 01 1月, 2011 2 次提交
  3. 31 12月, 2010 2 次提交
    • T
      Move symbols for ExecMergeJoin's state machine into nodeMergejoin.c. · 7b464015
      Tom Lane 提交于
      There's no reason for these values to be known anywhere else.  After
      doing this, executor/execdefs.h is vestigial and can be removed.
      7b464015
    • T
      Support RIGHT and FULL OUTER JOIN in hash joins. · f4e4b327
      Tom Lane 提交于
      This is advantageous first because it allows us to hash the smaller table
      regardless of the outer-join type, and second because hash join can be more
      flexible than merge join in dealing with arbitrary join quals in a FULL
      join.  For merge join all the join quals have to be mergejoinable, but hash
      join will work so long as there's at least one hashjoinable qual --- the
      others can be any condition.  (This is true essentially because we don't
      keep per-inner-tuple match flags in merge join, while hash join can do so.)
      
      To do this, we need a has-it-been-matched flag for each tuple in the
      hashtable, not just one for the current outer tuple.  The key idea that
      makes this practical is that we can store the match flag in the tuple's
      infomask, since there are lots of bits there that are of no interest for a
      MinimalTuple.  So we aren't increasing the size of the hashtable at all for
      the feature.
      
      To write this without turning the hash code into even more of a pile of
      spaghetti than it already was, I rewrote ExecHashJoin in a state-machine
      style, similar to ExecMergeJoin.  Other than that decision, it was pretty
      straightforward.
      f4e4b327
  4. 30 12月, 2010 1 次提交
  5. 29 12月, 2010 5 次提交
    • R
      Bump XLOG_PAGE_MAGIC. · d2bc1c99
      Robert Haas 提交于
      The unlogged tables patch (commit 53dbc27c,
      2010-12-29) should have done this, since it changes the format of an
      XLOG_SMGR_CREATE record.
      d2bc1c99
    • R
      Support unlogged tables. · 53dbc27c
      Robert Haas 提交于
      The contents of an unlogged table are WAL-logged; thus, they are not
      available on standby servers and are truncated whenever the database
      system enters recovery.  Indexes on unlogged tables are also unlogged.
      Unlogged GiST indexes are not currently supported.
      53dbc27c
    • M
      Add REPLICATION privilege for ROLEs · 9b8aff8c
      Magnus Hagander 提交于
      This privilege is required to do Streaming Replication, instead of
      superuser, making it possible to set up a SR slave that doesn't
      have write permissions on the master.
      
      Superuser privileges do NOT override this check, so in order to
      use the default superuser account for replication it must be
      explicitly granted the REPLICATION permissions. This is backwards
      incompatible change, in the interest of higher default security.
      9b8aff8c
    • T
      Avoid unexpected conversion overflow in planner for distant date values. · f2ba1e99
      Tom Lane 提交于
      The "date" type supports a wider range of dates than int64 timestamps do.
      However, there is pre-int64-timestamp code in the planner that assumes that
      all date values can be converted to timestamp with impunity.  Fortunately,
      what we really need out of the conversion is always a double (float8)
      value; so even when the date is out of timestamp's range it's possible to
      produce a sane answer.  All we need is a code path that doesn't try to
      force the result into int64.  Per trouble report from David Rericha.
      
      Back-patch to all supported versions.  Although this is surely a corner
      case, there's not much point in advertising a date range wider than
      timestamp's if we will choke on such values in unexpected places.
      f2ba1e99
    • T
      Fix ill-advised placement of PGRES_COPY_BOTH enum value. · 81a530a6
      Tom Lane 提交于
      It must be added at the end of the ExecStatusType enum to avoid ABI
      breakage compared to previous libpq versions.  Noted by Magnus.
      81a530a6
  6. 28 12月, 2010 8 次提交
  7. 27 12月, 2010 1 次提交
  8. 26 12月, 2010 2 次提交
  9. 25 12月, 2010 2 次提交
  10. 24 12月, 2010 2 次提交
  11. 23 12月, 2010 1 次提交
    • H
      Rewrite the GiST insertion logic so that we don't need the post-recovery · 9de3aa65
      Heikki Linnakangas 提交于
      cleanup stage to finish incomplete inserts or splits anymore. There was two
      reasons for the cleanup step:
      
      1. When a new tuple was inserted to a leaf page, the downlink in the parent
      needed to be updated to contain (ie. to be consistent with) the new key.
      Updating the parent in turn might require recursively updating the parent of
      the parent. We now handle that by updating the parent while traversing down
      the tree, so that when we insert the leaf tuple, all the parents are already
      consistent with the new key, and the tree is consistent at every step.
      
      2. When a page is split, we need to insert the downlink for the new right
      page(s), and update the downlink for the original page to not include keys
      that moved to the right page(s). We now handle that by setting a new flag,
      F_FOLLOW_RIGHT, on the non-rightmost pages in the split. When that flag is
      set, scans always follow the rightlink, regardless of the NSN mechanism used
      to detect concurrent page splits. That way the tree is consistent right after
      split, even though the downlink is still missing. This is very similar to the
      way B-tree splits are handled. When the downlink is inserted in the parent,
      the flag is cleared. To keep the insertion algorithm simple, when an
      insertion sees an incomplete split, indicated by the F_FOLLOW_RIGHT flag, it
      finishes the split before doing anything else.
      
      These changes allow removing the whole "invalid tuple" mechanism, but I
      retained the scan code to still follow invalid tuples correctly. While we
      don't create any such tuples anymore, we want to handle them gracefully in
      case you pg_upgrade a GiST index that has them. If we encounter any on an
      insert, though, we just throw an error saying that you need to REINDEX.
      
      The issue that got me into doing this is that if you did a checkpoint while
      an insert or split was in progress, and the checkpoint finishes quickly so
      that there is no WAL record related to the insert between RedoRecPtr and the
      checkpoint record, recovery from that checkpoint would not know to finish
      the incomplete insert. IOW, we have the same issue we solved with the
      rm_safe_restartpoint mechanism during normal operation too. It's highly
      unlikely to happen in practice, and this fix is far too large to backpatch,
      so we're just going to live with in previous versions, but this refactoring
      fixes it going forward.
      
      With this patch, you don't get the annoying
      'index "FOO" needs VACUUM or REINDEX to finish crash recovery' notices
      anymore if you crash at an unfortunate moment.
      9de3aa65
  12. 22 12月, 2010 3 次提交
    • M
      Add PQlibVersion() function to libpq · de9a4c27
      Magnus Hagander 提交于
      This function is like the PQserverVersion() function except
      it returns the version of libpq, making it possible for a client
      program or driver to determine which version of libpq is in
      use at runtime, and not just at link time.
      
      Suggested by Harald Armin Massa and several others.
      de9a4c27
    • R
      Use memcmp() rather than strncmp() when shorter string length is known. · 32ba2b51
      Robert Haas 提交于
      It appears that this will be faster for all but the shortest strings;
      at least one some platforms, memcmp() can use word-at-a-time comparisons.
      
      Noah Misch, somewhat pared down.
      32ba2b51
    • R
      Fix typos. · c5160b7e
      Robert Haas 提交于
      Andreas Karlsson
      c5160b7e
  13. 21 12月, 2010 2 次提交
    • R
      Work around unfortunate getppid() behavior on BSD-ish systems. · 24ecde77
      Robert Haas 提交于
      On MacOS X, and apparently also on other BSD-derived systems, attaching
      a debugger causes getppid() to return the pid of the debugging process
      rather than the actual parent PID.  As a result, debugging the
      autovacuum launcher, startup process, or WAL sender on such systems
      causes it to exit, because the previous coding of PostmasterIsAlive()
      detects postmaster death by testing whether getppid() == PostmasterPid.
      
      Work around that behavior by checking the return value of getppid()
      more carefully.  If it's PostmasterPid, the postmaster must be alive;
      if it's 1, assume the postmaster is dead.  If it's any other value,
      assume we've been debugged and fall through to the less-reliable
      kill() test.
      
      Review by Tom Lane.
      24ecde77
    • R
      Allow transactions that don't write WAL to commit asynchronously. · f6a0863e
      Robert Haas 提交于
      This case can arise if a transaction has written data, but only to
      temporary tables.  Loss of the commit record in case of a crash won't
      matter, because the temporary tables will be lost anyway.
      
      Reviewed by Heikki Linnakangas and Simon Riggs.
      f6a0863e
  14. 20 12月, 2010 3 次提交
    • M
      Remove thread dumping constant that requires newer Platform SDK · d382828f
      Magnus Hagander 提交于
      Since we're not multithreaded it only provides marginally useful
      information, and it does require a newer version of the Platform SDK
      than we target. We may want to reconsider this in the future along
      with a fix for MinGW.
      d382828f
    • T
      Fix up handling of simple-form CASE with constant test expression. · 1b19e2c0
      Tom Lane 提交于
      eval_const_expressions() can replace CaseTestExprs with constants when
      the surrounding CASE's test expression is a constant.  This confuses
      ruleutils.c's heuristic for deparsing simple-form CASEs, leading to
      Assert failures or "unexpected CASE WHEN clause" errors.  I had put in
      a hack solution for that years ago (see commit
      514ce7a3 of 2006-10-01), but bug #5794
      from Peter Speck shows that that solution failed to cover all cases.
      
      Fortunately, there's a much better way, which came to me upon reflecting
      that Peter's "CASE TRUE WHEN" seemed pretty redundant: we can "simplify"
      the simple-form CASE to the general form of CASE, by simply omitting the
      constant test expression from the rebuilt CASE construct.  This is
      intuitively valid because there is no need for the executor to evaluate
      the test expression at runtime; it will never be referenced, because any
      CaseTestExprs that would have referenced it are now replaced by constants.
      This won't save a whole lot of cycles, since evaluating a Const is pretty
      cheap, but a cycle saved is a cycle earned.  In any case it beats kluging
      ruleutils.c still further.  So this patch improves const-simplification
      and reverts the previous change in ruleutils.c.
      
      Back-patch to all supported branches.  The bug exists in 8.1 too, but it's
      out of warranty.
      1b19e2c0
    • T
      Fix erroneous parsing of tsquery input "... & !(subexpression) | ..." · abc10262
      Tom Lane 提交于
      After parsing a parenthesized subexpression, we must pop all pending
      ANDs and NOTs off the stack, just like the case for a simple operand.
      Per bug #5793.
      
      Also fix clones of this routine in contrib/intarray and contrib/ltree,
      where input of types query_int and ltxtquery had the same problem.
      
      Back-patch to all supported versions.
      abc10262
  15. 19 12月, 2010 1 次提交
    • M
      Support for collecting crash dumps on Windows · dcb09b59
      Magnus Hagander 提交于
      Add support for collecting "minidump" style crash dumps on
      Windows, by setting up an exception handling filter. Crash
      dumps will be generated in PGDATA/crashdumps if the directory
      is created (the existance of the directory is used as on/off
      switch for the generation of the dumps).
      
      Craig Ringer and Magnus Hagander
      dcb09b59