1. 08 8月, 2013 2 次提交
    • P
      Message style improvements · 9d775d88
      Peter Eisentraut 提交于
      9d775d88
    • F
      Fix assertion failure by an immediate shutdown. · 91c3613d
      Fujii Masao 提交于
      In PM_WAIT_DEAD_END state, checkpointer process must be dead already.
      But an immediate shutdown could make postmaster's state machine
      transition to PM_WAIT_DEAD_END state even if checkpointer process is
      still running,  and which caused assertion failure. This bug was introduced
      in commit 457d6cf0.
      
      This patch ensures that postmaster's state machine doesn't transition to
      PM_WAIT_DEAD_END state in an immediate shutdown while checkpointer
      process is running.
      91c3613d
  2. 06 8月, 2013 2 次提交
    • B
      pgtest: allow passing parameters, e.g. -s/--silent · f347f268
      Bruce Momjian 提交于
      Previously only -n was recognized.
      f347f268
    • T
      Simplify query_planner's API by having it return the top-level RelOptInfo. · 3ced8837
      Tom Lane 提交于
      Formerly, query_planner returned one or possibly two Paths for the topmost
      join relation, so that grouping_planner didn't see the join RelOptInfo
      (at least not directly; it didn't have any hesitation about examining
      cheapest_path->parent, though).  However, correct selection of the Paths
      involved a significant amount of coupling between query_planner and
      grouping_planner, a problem which has gotten worse over time.  It seems
      best to give up on this API choice and instead return the topmost
      RelOptInfo explicitly.  Then grouping_planner can pull out the Paths it
      wants from the rel's path list.  In this way we can remove all knowledge
      of grouping behaviors from query_planner.
      
      The only real benefit of the old way is that in the case of an empty
      FROM clause, we never made any RelOptInfos at all, just a Path.  Now
      we have to gin up a dummy RelOptInfo to represent the empty FROM clause.
      That's not a very big deal though.
      
      While at it, simplify query_planner's API a bit more by having the caller
      set up root->tuple_fraction and root->limit_tuples, rather than passing
      those values as separate parameters.  Since query_planner no longer does
      anything with either value, requiring it to fill the PlannerInfo fields
      seemed pretty arbitrary.
      
      This patch just rearranges code; it doesn't (intentionally) change any
      behaviors.  Followup patches will do more interesting things.
      3ced8837
  3. 05 8月, 2013 1 次提交
    • K
      Various cleanups for REFRESH MATERIALIZED VIEW CONCURRENTLY. · 841c29c8
      Kevin Grittner 提交于
      Open and lock each index before checking definition in RMVC.  The
      ExclusiveLock on the related table is not viewed as sufficient to
      ensure that no changes are made to the index definition, and
      invalidation messages from other backends might have been missed.
      Additionally, use RelationGetIndexExpressions() and check for NIL
      rather than doing our own loop.
      
      Protect against redefinition of tid and rowvar operators in RMVC.
      While working on this, noticed that the fixes for bugs found during
      the CF made the UPDATE statement useless, since no rows could
      qualify for that treatment any more.  Ripping out code to support
      the UPDATE statement simplified the operator cleanups.
      
      Change slightly confusing local field name.
      
      Use meaningful alias names on queries in refresh_by_match_merge().
      
      Per concerns of raised by Andres Freund and comments and
      suggestions from Noah Misch.  Some additional issues remain, which
      will be addressed separately.
      841c29c8
  4. 04 8月, 2013 1 次提交
    • T
      Make sure float4in/float8in accept all standard spellings of "infinity". · 221e92f6
      Tom Lane 提交于
      The C99 and POSIX standards require strtod() to accept all these spellings
      (case-insensitively): "inf", "+inf", "-inf", "infinity", "+infinity",
      "-infinity".  However, pre-C99 systems might accept only some or none of
      these, and apparently Windows still doesn't accept "inf".  To avoid
      surprising cross-platform behavioral differences, manually check for each
      of these spellings if strtod() fails.  We were previously handling just
      "infinity" and "-infinity" that way, but since C99 is most of the world
      now, it seems likely that applications are expecting all these spellings
      to work.
      
      Per bug #8355 from Basil Peace.  It turns out this fix won't actually
      resolve his problem, because Python isn't being this careful; but that
      doesn't mean we shouldn't be.
      221e92f6
  5. 03 8月, 2013 2 次提交
    • A
      Fix old visibility bug in HeapTupleSatisfiesDirty · 706f9dd9
      Alvaro Herrera 提交于
      If a tuple is locked but not updated by a concurrent transaction,
      HeapTupleSatisfiesDirty would return that transaction's Xid in xmax,
      causing callers to wait on it, when it is not necessary (in fact, if the
      other transaction had used a multixact instead of a plain Xid to mark
      the tuple, HeapTupleSatisfiesDirty would have behave differently and
      *not* returned the Xmax).
      
      This bug was introduced in commit 3f7fbf85, dated December 1998,
      so it's almost 15 years old now.  However, it's hard to see this
      misbehave, because before we had NOWAIT the only consequence of this is
      that transactions would wait for slightly more time than necessary; so
      it's not surprising that this hasn't been reported yet.
      
      Craig Ringer and Andres Freund
      706f9dd9
    • A
      Fix crash in error report of invalid tuple lock · 88c55668
      Alvaro Herrera 提交于
      My tweak of these error messages in commit c359a1b0 contained the
      thinko that a query would always have rowMarks set for a query
      containing a locking clause.  Not so: when declaring a cursor, for
      instance, rowMarks isn't set at the point we're checking, so we'd be
      dereferencing a NULL pointer.
      
      The fix is to pass the lock strength to the function raising the error,
      instead of trying to reverse-engineer it.  The result not only is more
      robust, but it also seems cleaner overall.
      
      Per report from Robert Haas.
      88c55668
  6. 02 8月, 2013 5 次提交
  7. 01 8月, 2013 5 次提交
    • R
      Remove SnapshotNow and HeapTupleSatisfiesNow. · 813fb031
      Robert Haas 提交于
      We now use MVCC catalog scans, and, per discussion, have eliminated
      all other remaining uses of SnapshotNow, so that we can now get rid of
      it.  This will break third-party code which is still using it, which
      is intentional, as we want such code to be updated to do things the
      new way.
      813fb031
    • S
      Add locking around SSL_context usage in libpq · aad2a630
      Stephen Frost 提交于
      I've been working with Nick Phillips on an issue he ran into when
      trying to use threads with SSL client certificates.  As it turns out,
      the call in initialize_SSL() to SSL_CTX_use_certificate_chain_file()
      will modify our SSL_context without any protection from other threads
      also calling that function or being at some other point and trying to
      read from SSL_context.
      
      To protect against this, I've written up the attached (based on an
      initial patch from Nick and much subsequent discussion) which puts
      locks around SSL_CTX_use_certificate_chain_file() and all of the other
      users of SSL_context which weren't already protected.
      
      Nick Phillips, much reworked by Stephen Frost
      
      Back-patch to 9.0 where we started loading the cert directly instead of
      using a callback.
      aad2a630
    • S
      Allow a context to be passed in for error handling · ddef1a39
      Stephen Frost 提交于
      As pointed out by Tom Lane, we can allow other users of the error
      handler callbacks to provide their own memory context by adding
      the context to use to ErrorData and using that instead of explicitly
      using ErrorContext.
      
      This then allows GetErrorContextStack() to be called from inside
      exception handlers, so modify plpgsql to take advantage of that and
      add an associated regression test for it.
      ddef1a39
    • A
      Fix mis-indented lines · a59516b6
      Alvaro Herrera 提交于
      Per Coverity
      a59516b6
    • A
      3142cf6d
  8. 31 7月, 2013 5 次提交
    • B
      pg_dump/pg_dumpall: remove unnecessary SQL trailing semicolons · 8eb29194
      Bruce Momjian 提交于
      Patch by Ian Lawrence Barwick
      8eb29194
    • T
      Fix regexp_matches() handling of zero-length matches. · d074b4e5
      Tom Lane 提交于
      We'd find the same match twice if it was of zero length and not immediately
      adjacent to the previous match.  replace_text_regexp() got similar cases
      right, so adjust this search logic to match that.  Note that even though
      the regexp_split_to_xxx() functions share this code, they did not display
      equivalent misbehavior, because the second match would be considered
      degenerate and ignored.
      
      Jeevan Chalke, with some cosmetic changes by me.
      d074b4e5
    • F
      Fix typo in comment. · c876fb42
      Fujii Masao 提交于
      Hitoshi Harada
      c876fb42
    • F
      Fix inaccurate description of tablespace. · ee08a78a
      Fujii Masao 提交于
      Currently we don't need to update the pg_tablespace catalog
      after redefining the symbolic links to the tablespaces
      because pg_tablespace.spclocation column was removed in
      PostgreSQL 9.2.
      
      Back patch to 9.2 where pg_tablespace.spclocation was removed.
      
      Ian Barwick, with minor change by me.
      ee08a78a
    • N
      Restore REINDEX constraint validation. · 16f38f72
      Noah Misch 提交于
      Refactoring as part of commit 8ceb2456
      had the unintended effect of making REINDEX TABLE and REINDEX DATABASE
      no longer validate constraints enforced by the indexes in question;
      REINDEX INDEX still did so.  Indexes marked invalid remained so, and
      constraint violations arising from data corruption went undetected.
      Back-patch to 9.0, like the causative commit.
      16f38f72
  9. 30 7月, 2013 2 次提交
  10. 29 7月, 2013 2 次提交
    • G
      Add SQL Standard WITH ORDINALITY support for UNNEST (and any other SRF) · c62736cc
      Greg Stark 提交于
      Author: Andrew Gierth, David Fetter
      Reviewers: Dean Rasheed, Jeevan Chalke, Stephen Frost
      c62736cc
    • T
      Fix contrib/cube and contrib/seg to build with bison 3.0. · 55cbfa53
      Tom Lane 提交于
      These modules used the YYPARSE_PARAM macro, which has been deprecated
      by the bison folk since 1.875, and which they finally removed in 3.0.
      Adjust the code to use the replacement facility, %parse-param, which
      is a much better solution anyway since it allows specification of the
      type of the extra parser parameter.  We can thus get rid of a lot of
      unsightly casting.
      
      Back-patch to all active branches, since somebody might try to build
      a back branch with up-to-date tools.
      55cbfa53
  11. 28 7月, 2013 2 次提交
  12. 27 7月, 2013 1 次提交
  13. 26 7月, 2013 5 次提交
    • T
      Prevent leakage of SPI tuple tables during subtransaction abort. · 3d13623d
      Tom Lane 提交于
      plpgsql often just remembers SPI-result tuple tables in local variables,
      and has no mechanism for freeing them if an ereport(ERROR) causes an escape
      out of the execution function whose local variable it is.  In the original
      coding, that wasn't a problem because the tuple table would be cleaned up
      when the function's SPI context went away during transaction abort.
      However, once plpgsql grew the ability to trap exceptions, repeated
      trapping of errors within a function could result in significant
      intra-function-call memory leakage, as illustrated in bug #8279 from
      Chad Wagner.
      
      We could fix this locally in plpgsql with a bunch of PG_TRY/PG_CATCH
      coding, but that would be tedious, probably slow, and prone to bugs of
      omission; moreover it would do nothing for similar risks elsewhere.
      What seems like a better plan is to make SPI itself responsible for
      freeing tuple tables at subtransaction abort.  This patch attacks the
      problem that way, keeping a list of live tuple tables within each SPI
      function context.  Currently, such freeing is automatic for tuple tables
      made within the failed subtransaction.  We might later add a SPI call to
      mark a tuple table as not to be freed this way, allowing callers to opt
      out; but until someone exhibits a clear use-case for such behavior, it
      doesn't seem worth bothering.
      
      A very useful side-effect of this change is that SPI_freetuptable() can
      now defend itself against bad calls, such as duplicate free requests;
      this should make things more robust in many places.  (In particular,
      this reduces the risks involved if a third-party extension contains
      now-redundant SPI_freetuptable() calls in error cleanup code.)
      
      Even though the leakage problem is of long standing, it seems imprudent
      to back-patch this into stable branches, since it does represent an API
      semantics change for SPI users.  We'll patch this in 9.3, but live with
      the leakage in older branches.
      3d13623d
    • R
      pgstattuple: Doc update for previous commit. · fd27b999
      Robert Haas 提交于
      In my previous change to make pgstattuple use SnapshotDirty rather
      than SnapshotNow, I failed to notice that the documenation also
      needed to be updated to match.  Fix.
      fd27b999
    • R
      Change currtid functions to use an MVCC snapshot, not SnapshotNow. · ed93feb8
      Robert Haas 提交于
      This has a slight performance cost, but the only known consumers
      of these functions, known at the SQL level as currtid and currtid2,
      is pgsql-odbc; whose usage, we hope, is not sufficiently intensive
      to make this a problem.
      
      Per discussion.
      ed93feb8
    • R
      pgstattuple: Use SnapshotDirty, not SnapshotNow. · 80c79ab2
      Robert Haas 提交于
      Tuples belonging to uncommitted transactions should not be
      counted as dead.
      
      This is arguably a bug fix that should be back-patched, but
      as no one ever noticed until it came time to try to get rid
      of SnapshotNow, I'm only doing this in master for now.
      80c79ab2
    • R
      Don't use SnapshotNow in get_actual_variable_range. · 3483f433
      Robert Haas 提交于
      Instead, use the active snapshot.  Per Tom Lane, this function is
      most interested in knowing the range of tuples our scan will actually
      see.
      
      This is another step towards full removal of SnapshotNow.
      3483f433
  14. 25 7月, 2013 5 次提交
    • T
      Fix configure probe for sys/ucred.h. · 1b09630f
      Tom Lane 提交于
      The configure script's test for <sys/ucred.h> did not work on OpenBSD,
      because on that platform <sys/param.h> has to be included first.
      As a result, socket peer authentication was disabled on that platform.
      Problem introduced in commit be4585b1.
      
      Andres Freund, slightly simplified by me.
      1b09630f
    • B
      pg_upgrade: adjust umask() calls · 76a7650c
      Bruce Momjian 提交于
      Since pg_upgrade -j on Windows uses threads, calling umask()
      before/after opening a file via fopen_priv() is no longer possible, so
      set umask() as we enter the thread-creating loop, and reset it on exit.
      Also adjust internal fopen_priv() calls to just use fopen().
      Backpatch to 9.3beta.
      76a7650c
    • S
      Improvements to GetErrorContextStack() · 9bd0feeb
      Stephen Frost 提交于
      As GetErrorContextStack() borrowed setup and tear-down code from other
      places, it was less than clear that it must only be called as a
      top-level entry point into the error system and can't be called by an
      exception handler (unlike the rest of the error system, which is set up
      to be reentrant-safe).
      
      Being called from an exception handler is outside the charter of
      GetErrorContextStack(), so add a bit more protection against it,
      improve the comments addressing why we have to set up an errordata
      stack for this function at all, and add a few more regression tests.
      
      Lack of clarity pointed out by Tom Lane; all bugs are mine.
      9bd0feeb
    • B
      pg_upgrade: fix initialization of thread argument · e4c6cccd
      Bruce Momjian 提交于
      Reorder initialization of thread argument marker to it happens before
      reap_child() is called.
      Backpatch to 9.3.
      e4c6cccd
    • S
      Add GET DIAGNOSTICS ... PG_CONTEXT in PL/PgSQL · 83128325
      Stephen Frost 提交于
      This adds the ability to get the call stack as a string from within a
      PL/PgSQL function, which can be handy for logging to a table, or to
      include in a useful message to an end-user.
      
      Pavel Stehule, reviewed by Rushabh Lathia and rather heavily whacked
      around by Stephen Frost.
      83128325