1. 29 7月, 2013 1 次提交
    • 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
  2. 28 7月, 2013 2 次提交
  3. 27 7月, 2013 1 次提交
  4. 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
  5. 25 7月, 2013 7 次提交
    • 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
    • T
      Improve ilist.h's support for deletion of slist elements during iteration. · fa2fad3c
      Tom Lane 提交于
      Previously one had to use slist_delete(), implying an additional scan of
      the list, making this infrastructure considerably less efficient than
      traditional Lists when deletion of element(s) in a long list is needed.
      Modify the slist_foreach_modify() macro to support deleting the current
      element in O(1) time, by keeping a "prev" pointer in addition to "cur"
      and "next".  Although this makes iteration with this macro a bit slower,
      no real harm is done, since in any scenario where you're not going to
      delete the current list element you might as well just use slist_foreach
      instead.  Improve the comments about when to use each macro.
      
      Back-patch to 9.3 so that we'll have consistent semantics in all branches
      that provide ilist.h.  Note this is an ABI break for callers of
      slist_foreach_modify().
      
      Andres Freund and Tom Lane
      fa2fad3c
    • B
      pg_upgrade: more Windows parallel/-j fixes · 910d3a45
      Bruce Momjian 提交于
      More fixes to handle Windows thread parameter passing.
      Backpatch to 9.3 beta.
      Patch originally from Andrew Dunstan
      910d3a45
  6. 24 7月, 2013 7 次提交
    • B
      pg_upgrade: fix parallel/-j crash on Windows · d7de6a47
      Bruce Momjian 提交于
      This fixes the problem of passing the wrong function pointer when doing
      parallel copy/link operations on Windows.
      Backpatched to 9.3beta.
      Found and patch supplied by Andrew Dunstan
      d7de6a47
    • T
      Fix booltestsel() for case where we have NULL stats but not MCV stats. · b32a25c3
      Tom Lane 提交于
      In a boolean column that contains mostly nulls, ANALYZE might not find
      enough non-null values to populate the most-common-values stats,
      but it would still create a pg_statistic entry with stanullfrac set.
      The logic in booltestsel() for this situation did the wrong thing for
      "col IS NOT TRUE" and "col IS NOT FALSE" tests, forgetting that null
      values would satisfy these tests (so that the true selectivity would
      be close to one, not close to zero).  Per bug #8274.
      
      Fix by Andrew Gierth, some comment-smithing by me.
      b32a25c3
    • T
      Move strip_implicit_coercions() from optimizer to nodeFuncs.c. · 10a509d8
      Tom Lane 提交于
      Use of this function has spread into the parser and rewriter, so it seems
      like time to pull it out of the optimizer and put it into the more central
      nodeFuncs module.  This eliminates the need to #include optimizer/clauses.h
      in most of the calling files, demonstrating that this function was indeed a
      bit outside the normal code reference patterns.
      10a509d8
    • T
      Further hacking on ruleutils' new column-alias-assignment code. · ef655663
      Tom Lane 提交于
      After further thought about implicit coercions appearing in a joinaliasvars
      list, I realized that they represent an additional reason why we might need
      to reference the join output column directly instead of referencing an
      underlying column.  Consider SELECT x FROM t1 LEFT JOIN t2 USING (x) where
      t1.x is of type date while t2.x is of type timestamptz.  The merged output
      variable is of type timestamptz, but it won't go to null when t2 does,
      therefore neither t1.x nor t2.x is a valid substitute reference.
      
      The code in get_variable() actually gets this case right, since it knows
      it shouldn't look through a coercion, but we failed to ensure that the
      unqualified output column name would be globally unique.  To fix, modify
      the code that trawls for a dangerous situation so that it actually scans
      through an unnamed join's joinaliasvars list to see if there are any
      non-simple-Var entries.
      ef655663
    • A
      Check for NULL result from strdup · bb686c9a
      Alvaro Herrera 提交于
      Per Coverity Scan
      bb686c9a
    • T
      Change post-rewriter representation of dropped columns in joinaliasvars. · a7cd853b
      Tom Lane 提交于
      It's possible to drop a column from an input table of a JOIN clause in a
      view, if that column is nowhere actually referenced in the view.  But it
      will still be there in the JOIN clause's joinaliasvars list.  We used to
      replace such entries with NULL Const nodes, which is handy for generation
      of RowExpr expansion of a whole-row reference to the view.  The trouble
      with that is that it can't be distinguished from the situation after
      subquery pull-up of a constant subquery output expression below the JOIN.
      Instead, replace such joinaliasvars with null pointers (empty expression
      trees), which can't be confused with pulled-up expressions.  expandRTE()
      still emits the old convention, though, for convenience of RowExpr
      generation and to reduce the risk of breaking extension code.
      
      In HEAD and 9.3, this patch also fixes a problem with some new code in
      ruleutils.c that was failing to cope with implicitly-casted joinaliasvars
      entries, as per recent report from Feike Steenbergen.  That oversight was
      because of an inadequate description of the data structure in parsenodes.h,
      which I've now corrected.  There were some pre-existing oversights of the
      same ilk elsewhere, which I believe are now all fixed.
      a7cd853b
    • A
      Tweak FOR UPDATE/SHARE error message wording (again) · c359a1b0
      Alvaro Herrera 提交于
      In commit 0ac5ad51 I changed some error messages from "FOR
      UPDATE/SHARE" to a rather long gobbledygook which nobody liked.  Then,
      in commit cb9b66d3 I changed them again, but the alternative chosen
      there was deemed suboptimal by Peter Eisentraut, who in message
      1373937980.20441.8.camel@vanquo.pezone.net proposed an alternative
      involving a dynamically-constructed string based on the actual locking
      strength specified in the SQL command.  This patch implements that
      suggestion.
      c359a1b0
  7. 23 7月, 2013 10 次提交
    • R
      Use InvalidSnapshot, now SnapshotNow, as the default snapshot. · 765ad89b
      Robert Haas 提交于
      As far as I can determine, there's no code in the core distribution
      that fails to explicitly set the snapshot of a scan or executor
      state.  If there is any such code, this will probably cause it to
      seg fault; friendlier suggestions were discussed on pgsql-hackers,
      but there was no consensus that anything more than this was
      needed.
      
      This is another step towards the hoped-for complete removal of
      SnapshotNow.
      765ad89b
    • R
      Additional regression tests for ALTER OPERATOR FAMILY. · e6055061
      Robert Haas 提交于
      Robins Tharakan, reviewed by Szymon Guz
      e6055061
    • P
      ecpg: Move function prototype into header file · 9feeef92
      Peter Eisentraut 提交于
      PGTYPEStimestamp_defmt_scan() was declared twice inside different .c
      files, with slightly different prototypes.  Move it into a header file
      and correct the prototype.
      9feeef92
    • P
      doc: Remove tab from SGML file · 2f1fa75a
      Peter Eisentraut 提交于
      2f1fa75a
    • T
      Add --rate option. · fc9f4e9f
      Tatsuo Ishii 提交于
      This controls the target transaction rate to certain tps, rather than
      maximum. Patch contributed by Fabien COELHO, reviewed by Greg Smith,
      and slight editing by me.
      fc9f4e9f
    • R
      Fix cache flush hazard in ExecRefreshMatView. · 21e28e45
      Robert Haas 提交于
      Andres Freund
      21e28e45
    • R
      pgrowlocks: Use GetActiveSnapshot() rather than SnapshotNow. · 2e44770f
      Robert Haas 提交于
      Per discussion, it's desirable to eliminate all remaining uses of
      SnapshotNow, because it has unpleasant semantics: race conditions
      can result in seeing multiple versions of a concurrently updated
      row, or none at all.  By using GetActiveSnapshot() here, callers
      will see exactly those rows that would have been visible if the
      invoking query had scanned the table using, for example, a SELECT
      statement.
      
      This is slightly different from the old behavior, because commits
      that happen concurrently with the scan will not affect the results.
      In REPEATABLE READ or SERIALIZABLE modes, where transaction
      snapshots are used, commits that have happened since the start of
      the transaction will also not affect the results.  It is hoped
      that this minor incompatibility will be thought an improvement,
      or at least no worse than what we did before.
      2e44770f
    • R
      Remove bgw_sighup and bgw_sigterm. · f40a318e
      Robert Haas 提交于
      Per discussion on pgsql-hackers, these aren't really needed.  Interim
      versions of the background worker patch had the worker starting with
      signals already unblocked, which would have made this necessary.
      But the final version does not, so we don't really need it; and it
      doesn't work well with the new facility for starting dynamic background
      workers, so just rip it out.
      
      Also per discussion on pgsql-hackers, back-patch this change to 9.3.
      It's best to get the API break out of the way before we do an
      official release of this facility, to avoid more pain for extension
      authors later.
      f40a318e
    • R
      Adjust HeapTupleSatisfies* routines to take a HeapTuple. · 0518ecee
      Robert Haas 提交于
      Previously, these functions took a HeapTupleHeader, but upcoming
      patches for logical replication will introduce new a new snapshot
      type under which the tuple's TID will be used to lookup (CMIN, CMAX)
      for visibility determination purposes.  This makes that information
      available.  Code churn is minimal since HeapTupleSatisfiesVisibility
      took the HeapTuple anyway, and deferenced it before calling the
      satisfies function.
      
      Independently of logical replication, this allows t_tableOid and
      t_self to be cross-checked via assertions in tqual.c.  This seems
      like a useful way to make sure that all callers are setting these
      values properly, which has been previously put forward as
      desirable.
      
      Andres Freund, reviewed by Álvaro Herrera
      0518ecee
    • A
      Silence compiler warning on an unused variable · 0aeb5ae2
      Alvaro Herrera 提交于
      Also, tweak wording in comments (per Andres) and documentation (myself)
      to point out that it's the database's default tablespace that can be
      passed as 0, not DEFAULTTABLESPACE_OID.  Robert Haas noticed the bug in
      the code, but didn't update the accompanying prose.
      0aeb5ae2
  8. 22 7月, 2013 1 次提交
    • R
      Add infrastructure for mapping relfilenodes to relation OIDs. · f01d1ae3
      Robert Haas 提交于
      Future patches are expected to introduce logical replication that
      works by decoding WAL.  WAL contains relfilenodes rather than relation
      OIDs, so this infrastructure will be needed to find the relation OID
      based on WAL contents.
      
      If logical replication does not make it into this release, we probably
      should consider reverting this, since it will add some overhead to DDL
      operations that create new relations.  One additional index insert per
      pg_class row is not a large overhead, but it's more than zero.
      Another way of meeting the needs of logical replication would be to
      the relation OID to WAL, but that would burden DML operations, not
      only DDL.
      
      Andres Freund, with some changes by me.  Design review, in earlier
      versions, by Álvaro Herrera.
      f01d1ae3
  9. 21 7月, 2013 1 次提交
    • T
      Fix error handling in PLy_spi_execute_fetch_result(). · b3b10c39
      Tom Lane 提交于
      If an error is thrown out of the datatype I/O functions called by this
      function, we need to do subtransaction cleanup, which the previous coding
      entirely failed to do.  Fortunately, both existing callers of this function
      already have proper cleanup logic, so re-throwing the exception is enough.
      
      Also, postpone creation of the resultset tupdesc until after the I/O
      conversions are complete, so that we won't leak memory in TopMemoryContext
      when such an error happens.
      b3b10c39
  10. 20 7月, 2013 2 次提交
    • P
      Clean up new JSON API typedefs · ff41a5de
      Peter Eisentraut 提交于
      The new JSON API uses a bit of an unusual typedef scheme, where for
      example OkeysState is a pointer to okeysState.  And that's not applied
      consistently either.  Change that to the more usual PostgreSQL style
      where struct typedefs are upper case, and use pointers explicitly.
      ff41a5de
    • A
      Fix HeapTupleSatisfiesVacuum on aborted updater xacts · 6737aa72
      Alvaro Herrera 提交于
      By using only the macro that checks infomask bits
      HEAP_XMAX_IS_LOCKED_ONLY to verify whether a multixact is not an
      updater, and not the full HeapTupleHeaderIsOnlyLocked, it would come to
      the wrong result in case of a multixact containing an aborted update;
      therefore returning the wrong result code.  This would cause predicate.c
      to break completely (as in bug report #8273 from David Leverton), and
      certain index builds would misbehave.  As far as I can tell, other
      callers of the bogus routine would make harmless mistakes or not be
      affected by the difference at all; so this was a pretty narrow case.
      
      Also, no other user of the HEAP_XMAX_IS_LOCKED_ONLY macro is as
      careless; they all check specifically for the HEAP_XMAX_IS_MULTI case,
      and they all verify whether the updater is InvalidXid before concluding
      that it's a valid updater.  So there doesn't seem to be any similar bug.
      6737aa72
  11. 19 7月, 2013 3 次提交