Skip to content
Snippets Groups Projects
  1. May 07, 2012
  2. May 04, 2012
    • Tom Lane's avatar
      Overdue code review for transaction-level advisory locks patch. · 71b9549d
      Tom Lane authored
      Commit 62c7bd31 had assorted problems, most
      visibly that it broke PREPARE TRANSACTION in the presence of session-level
      advisory locks (which should be ignored by PREPARE), as per a recent
      complaint from Stephen Rees.  More abstractly, the patch made the
      LockMethodData.transactional flag not merely useless but outright
      dangerous, because in point of fact that flag no longer tells you anything
      at all about whether a lock is held transactionally.  This fix therefore
      removes that flag altogether.  We now rely entirely on the convention
      already in use in lock.c that transactional lock holds must be owned by
      some ResourceOwner, while session holds are never so owned.  Setting the
      locallock struct's owner link to NULL thus denotes a session hold, and
      there is no redundant marker for that.
      
      PREPARE TRANSACTION now works again when there are session-level advisory
      locks, and it is also able to transfer transactional advisory locks to the
      prepared transaction, but for implementation reasons it throws an error if
      we hold both types of lock on a single lockable object.  Perhaps it will be
      worth improving that someday.
      
      Assorted other minor cleanup and documentation editing, as well.
      
      Back-patch to 9.1, except that in the 9.1 branch I did not remove the
      LockMethodData.transactional flag for fear of causing an ABI break for
      any external code that might be examining those structs.
      71b9549d
  3. May 03, 2012
  4. May 02, 2012
  5. May 01, 2012
    • Peter Eisentraut's avatar
      Remove dead ports · f2f9439f
      Peter Eisentraut authored
      Remove the following ports:
      
      - dgux
      - nextstep
      - sunos4
      - svr4
      - ultrix4
      - univel
      
      These are obsolete and not worth rescuing.  In most cases, there is
      circumstantial evidence that they wouldn't work anymore anyway.
      f2f9439f
  6. Apr 30, 2012
    • Tom Lane's avatar
      Converge all SQL-level statistics timing values to float8 milliseconds. · 809e7e21
      Tom Lane authored
      This patch adjusts the core statistics views to match the decision already
      taken for pg_stat_statements, that values representing elapsed time should
      be represented as float8 and measured in milliseconds.  By using float8,
      we are no longer tied to a specific maximum precision of timing data.
      (Internally, it's still microseconds, but we could now change that without
      needing changes at the SQL level.)
      
      The columns affected are
      pg_stat_bgwriter.checkpoint_write_time
      pg_stat_bgwriter.checkpoint_sync_time
      pg_stat_database.blk_read_time
      pg_stat_database.blk_write_time
      pg_stat_user_functions.total_time
      pg_stat_user_functions.self_time
      pg_stat_xact_user_functions.total_time
      pg_stat_xact_user_functions.self_time
      
      The first four of these are new in 9.2, so there is no compatibility issue
      from changing them.  The others require a release note comment that they
      are now double precision (and can show a fractional part) rather than
      bigint as before; also their underlying statistics functions now match
      the column definitions, instead of returning bigint microseconds.
      809e7e21
    • Peter Eisentraut's avatar
      Mark ReThrowError() with attribute noreturn · 26471a51
      Peter Eisentraut authored
      All related functions were already so marked.
      26471a51
    • Tom Lane's avatar
      Rename I/O timing statistics columns to blk_read_time and blk_write_time. · 1dd89ead
      Tom Lane authored
      This seems more consistent with the pre-existing choices for names of
      other statistics columns.  Rename assorted internal identifiers to match.
      1dd89ead
  7. Apr 29, 2012
  8. Apr 27, 2012
    • Robert Haas's avatar
      Prevent index-only scans from returning wrong answers under Hot Standby. · 3424bff9
      Robert Haas authored
      The alternative of disallowing index-only scans in HS operation was
      discussed, but the consensus was that it was better to treat marking
      a page all-visible as a recovery conflict for snapshots that could still
      fail to see XIDs on that page.  We may in the future try to soften this,
      so that we simply force index scans to do heap fetches in cases where
      this may be an issue, rather than throwing a hard conflict.
      3424bff9
  9. Apr 26, 2012
    • Tom Lane's avatar
      Fix planner's handling of RETURNING lists in writable CTEs. · 9fa82c98
      Tom Lane authored
      setrefs.c failed to do "rtoffset" adjustment of Vars in RETURNING lists,
      which meant they were left with the wrong varnos when the RETURNING list
      was in a subquery.  That was never possible before writable CTEs, of
      course, but now it's broken.  The executor fails to notice any problem
      because ExecEvalVar just references the ecxt_scantuple for any normal
      varno; but EXPLAIN breaks when the varno is wrong, as illustrated in a
      recent complaint from Bartosz Dmytrak.
      
      Since the eventual rtoffset of the subquery is not known at the time
      we are preparing its plan node, the previous scheme of executing
      set_returning_clause_references() at that time cannot handle this
      adjustment.  Fortunately, it turns out that we don't really need to do it
      that way, because all the needed information is available during normal
      setrefs.c execution; we just have to dig it out of the ModifyTable node.
      So, do that, and get rid of the kluge of early setrefs processing of
      RETURNING lists.  (This is a little bit of a cheat in the case of inherited
      UPDATE/DELETE, because we are not passing a "root" struct that corresponds
      exactly to what the subplan was built with.  But that doesn't matter, and
      anyway this is less ugly than early setrefs processing was.)
      
      Back-patch to 9.1, where the problem became possible to hit.
      9fa82c98
  10. Apr 25, 2012
  11. Apr 24, 2012
  12. Apr 21, 2012
    • Alvaro Herrera's avatar
      Recast "ONLY" column CHECK constraints as NO INHERIT · 09ff76fc
      Alvaro Herrera authored
      The original syntax wasn't universally loved, and it didn't allow its
      usage in CREATE TABLE, only ALTER TABLE.  It now works everywhere, and
      it also allows using ALTER TABLE ONLY to add an uninherited CHECK
      constraint, per discussion.
      
      The pg_constraint column has accordingly been renamed connoinherit.
      
      This commit partly reverts some of the changes in
      61d81bd2, particularly some pg_dump and
      psql bits, because now pg_get_constraintdef includes the necessary NO
      INHERIT within the constraint definition.
      
      Author: Nikhil Sontakke
      Some tweaks by me
      09ff76fc
  13. Apr 19, 2012
    • Tom Lane's avatar
      Revise parameterized-path mechanism to fix assorted issues. · 5b7b5518
      Tom Lane authored
      This patch adjusts the treatment of parameterized paths so that all paths
      with the same parameterization (same set of required outer rels) for the
      same relation will have the same rowcount estimate.  We cache the rowcount
      estimates to ensure that property, and hopefully save a few cycles too.
      Doing this makes it practical for add_path_precheck to operate without
      a rowcount estimate: it need only assume that paths with different
      parameterizations never dominate each other, which is close enough to
      true anyway for coarse filtering, because normally a more-parameterized
      path should yield fewer rows thanks to having more join clauses to apply.
      
      In add_path, we do the full nine yards of comparing rowcount estimates
      along with everything else, so that we can discard parameterized paths that
      don't actually have an advantage.  This fixes some issues I'd found with
      add_path rejecting parameterized paths on the grounds that they were more
      expensive than not-parameterized ones, even though they yielded many fewer
      rows and hence would be cheaper once subsequent joining was considered.
      
      To make the same-rowcounts assumption valid, we have to require that any
      parameterized path enforce *all* join clauses that could be obtained from
      the particular set of outer rels, even if not all of them are useful for
      indexing.  This is required at both base scans and joins.  It's a good
      thing anyway since the net impact is that join quals are checked at the
      lowest practical level in the join tree.  Hence, discard the original
      rather ad-hoc mechanism for choosing parameterization joinquals, and build
      a better one that has a more principled rule for when clauses can be moved.
      The original rule was actually buggy anyway for lack of knowledge about
      which relations are part of an outer join's outer side; getting this right
      requires adding an outer_relids field to RestrictInfo.
      5b7b5518
  14. Apr 18, 2012
  15. Apr 14, 2012
    • Robert Haas's avatar
      pg_size_pretty(numeric) · 4a2d7ad7
      Robert Haas authored
      The output of the new pg_xlog_location_diff function is of type numeric,
      since it could theoretically overflow an int8 due to signedness; this
      provides a convenient way to format such values.
      
      Fujii Masao, with some beautification by me.
      4a2d7ad7
  16. Apr 13, 2012
    • Peter Eisentraut's avatar
      Rename bytea_agg to string_agg and add delimiter argument · c0cc526e
      Peter Eisentraut authored
      Per mailing list discussion, we would like to keep the bytea functions
      parallel to the text functions, so rename bytea_agg to string_agg,
      which already exists for text.
      
      Also, to satisfy the rule that we don't want aggregate functions of
      the same name with a different number of arguments, add a delimiter
      argument, just like string_agg for text already has.
      c0cc526e
  17. Apr 08, 2012
    • Heikki Linnakangas's avatar
      Do stack-depth checking in all postmaster children. · ef3883d1
      Heikki Linnakangas authored
      We used to only initialize the stack base pointer when starting up a regular
      backend, not in other processes. In particular, autovacuum workers can run
      arbitrary user code, and without stack-depth checking, infinite recursion
      in e.g an index expression will bring down the whole cluster.
      
      The comment about PL/Java using set_stack_base() is not yet true. As the
      code stands, PL/java still modifies the stack_base_ptr variable directly.
      However, it's been discussed in the PL/Java mailing list that it should be
      changed to use the function, because PL/Java is currently oblivious to the
      register stack used on Itanium. There's another issues with PL/Java, namely
      that the stack base pointer it sets is not really the base of the stack, it
      could be something close to the bottom of the stack. That's a separate issue
      that might need some further changes to this code, but that's a different
      story.
      
      Backpatch to all supported releases.
      ef3883d1
  18. Apr 06, 2012
  19. Apr 05, 2012
  20. Apr 03, 2012
  21. Mar 31, 2012
  22. Mar 29, 2012
    • Heikki Linnakangas's avatar
      Inherit max_safe_fds to child processes in EXEC_BACKEND mode. · 5762a4d9
      Heikki Linnakangas authored
      Postmaster sets max_safe_fds by testing how many open file descriptors it
      can open, and that is normally inherited by all child processes at fork().
      Not so on EXEC_BACKEND, ie. Windows, however. Because of that, we
      effectively ignored max_files_per_process on Windows, and always assumed
      a conservative default of 32 simultaneous open files. That could have an
      impact on performance, if you need to access a lot of different files
      in a query. After this patch, the value is passed to child processes by
      save/restore_backend_variables() among many other global variables.
      
      It has been like this forever, but given the lack of complaints about it,
      I'm not backpatching this.
      5762a4d9
    • Andrew Dunstan's avatar
      Remove now redundant pgpipe code. · d2c1740d
      Andrew Dunstan authored
      d2c1740d
  23. Mar 27, 2012
    • Tom Lane's avatar
      Add some infrastructure for contrib/pg_stat_statements. · a40fa613
      Tom Lane authored
      Add a queryId field to Query and PlannedStmt.  This is not used by the
      core backend, except for being copied around at appropriate times.
      It's meant to allow plug-ins to track a particular query forward from
      parse analysis to execution.
      
      The queryId is intentionally not dumped into stored rules (and hence this
      commit doesn't bump catversion).  You could argue that choice either way,
      but it seems better that stored rule strings not have any dependency
      on plug-ins that might or might not be present.
      
      Also, add a post_parse_analyze_hook that gets invoked at the end of
      parse analysis (but only for top-level analysis of complete queries,
      not cases such as analyzing a domain's default-value expression).
      This is mainly meant to be used to compute and assign a queryId,
      but it could have other applications.
      
      Peter Geoghegan
      a40fa613
    • Robert Haas's avatar
      New GUC, track_iotiming, to track I/O timings. · 40b9b957
      Robert Haas authored
      Currently, the only way to see the numbers this gathers is via
      EXPLAIN (ANALYZE, BUFFERS), but the plan is to add visibility through
      the stats collector and pg_stat_statements in subsequent patches.
      
      Ants Aasma, reviewed by Greg Smith, with some further changes by me.
      40b9b957
  24. Mar 26, 2012
    • Robert Haas's avatar
      Code cleanup for heap_freeze_tuple. · 7386089d
      Robert Haas authored
      It used to be case that lazy vacuum could call this function with only
      a shared lock on the buffer, but neither lazy vacuum nor any other
      code path does that any more.  Simplify the code accordingly and clean
      up some related, obsolete comments.
      7386089d
    • Tom Lane's avatar
      Replace empty locale name with implied value in CREATE DATABASE and initdb. · c7cea267
      Tom Lane authored
      setlocale() accepts locale name "" as meaning "the locale specified by the
      process's environment variables".  Historically we've accepted that for
      Postgres' locale settings, too.  However, it's fairly unsafe to store an
      empty string in a new database's pg_database.datcollate or datctype fields,
      because then the interpretation could vary across postmaster restarts,
      possibly resulting in index corruption and other unpleasantness.
      
      Instead, we should expand "" to whatever it means at the moment of calling
      CREATE DATABASE, which we can do by saving the value returned by
      setlocale().
      
      For consistency, make initdb set up the initial lc_xxx parameter values the
      same way.  initdb was already doing the right thing for empty locale names,
      but it did not replace non-empty names with setlocale results.  On a
      platform where setlocale chooses to canonicalize the spellings of locale
      names, this would result in annoying inconsistency.  (It seems that popular
      implementations of setlocale don't do such canonicalization, which is a
      pity, but the POSIX spec certainly allows it to be done.)  The same risk
      of inconsistency leads me to not venture back-patching this, although it
      could certainly be seen as a longstanding bug.
      
      Per report from Jeff Davis, though this is not his proposed patch.
      c7cea267
  25. Mar 24, 2012
    • Tom Lane's avatar
      Fix planner's handling of outer PlaceHolderVars within subqueries. · 8279eb41
      Tom Lane authored
      For some reason, in the original coding of the PlaceHolderVar mechanism
      I had supposed that PlaceHolderVars couldn't propagate into subqueries.
      That is of course entirely possible.  When it happens, we need to treat
      an outer-level PlaceHolderVar much like an outer Var or Aggref, that is
      SS_replace_correlation_vars() needs to replace the PlaceHolderVar with
      a Param, and then when building the finished SubPlan we have to provide
      the PlaceHolderVar expression as an actual parameter for the SubPlan.
      The handling of the contained expression is a bit delicate but it can be
      treated exactly like an Aggref's expression.
      
      In addition to the missing logic in subselect.c, prepjointree.c was failing
      to search subqueries for PlaceHolderVars that need their relids adjusted
      during subquery pullup.  It looks like everyplace else that touches
      PlaceHolderVars got it right, though.
      
      Per report from Mark Murawski.  In 9.1 and HEAD, queries affected by this
      oversight would fail with "ERROR: Upper-level PlaceHolderVar found where
      not expected".  But in 9.0 and 8.4, you'd silently get possibly-wrong
      answers, since the value transmitted into the subquery wouldn't go to null
      when it should.
      8279eb41
  26. Mar 23, 2012
    • Tom Lane's avatar
      Code review for protransform patches. · 0339047b
      Tom Lane authored
      Fix loss of previous expression-simplification work when a transform
      function fires: we must not simply revert to untransformed input tree.
      Instead build a dummy FuncExpr node to pass to the transform function.
      This has the additional advantage of providing a simpler, more uniform
      API for transform functions.
      
      Move documentation to a somewhat less buried spot, relocate some
      poorly-placed code, be more wary of null constants and invalid typmod
      values, add an opr_sanity check on protransform function signatures,
      and some other minor cosmetic adjustments.
      
      Note: although this patch touches pg_proc.h, no need for catversion
      bump, because the changes are cosmetic and don't actually change the
      intended catalog contents.
      0339047b
Loading