1. 30 Apr, 2012 1 commit
  2. 29 Apr, 2012 6 commits
  3. 28 Apr, 2012 3 commits
    • Tom Lane's avatar
      Adjust timing units in pg_stat_statements. · 93f94e35
      Tom Lane authored
      Display total time and I/O timings in milliseconds, for consistency with
      the units used for timings in the core statistics views.  The columns
      remain of float8 type, so that sub-msec precision is available.  (At some
      point we will probably want to convert the core views to use float8 type
      for the same reason, but this patch does not touch that issue.)
      
      This is a release-note-requiring change in the meaning of the total_time
      column.  The I/O timing columns are new as of 9.2, so there is no
      compatibility impact from redefining them.
      
      Do some minor copy-editing in the documentation, too.
      93f94e35
    • Tom Lane's avatar
      Clear I/O timing counters after sending them to the stats collector. · cdbad241
      Tom Lane authored
      This oversight caused the reported times to accumulate in an O(N^2)
      fashion the longer a backend runs.
      cdbad241
    • Peter Eisentraut's avatar
  4. 27 Apr, 2012 4 commits
    • Tom Lane's avatar
      Fix printing of whole-row Vars at top level of a SELECT targetlist. · d6f7d4fd
      Tom Lane authored
      Normally whole-row Vars are printed as "tabname.*".  However, that does not
      work at top level of a targetlist, because per SQL standard the parser will
      think that the "*" should result in column-by-column expansion; which is
      not at all what a whole-row Var implies.  We used to just print the table
      name in such cases, which works most of the time; but it fails if the table
      name matches a column name available anywhere in the FROM clause.  This
      could lead for instance to a view being interpreted differently after dump
      and reload.  Adding parentheses doesn't fix it, but there is a reasonably
      simple kluge we can use instead: attach a no-op cast, so that the "*" isn't
      syntactically at top level anymore.  This makes the printing of such
      whole-row Vars a lot more consistent with other Vars, and may indeed fix
      more cases than just the reported one; I'm suspicious that cases involving
      schema qualification probably didn't work properly before, either.
      
      Per bug report and fix proposal from Abbas Butt, though this patch is quite
      different in detail from his.
      
      Back-patch to all supported versions.
      d6f7d4fd
    • Bruce Momjian's avatar
      Add options to git_changelog for use in major release note creation: · 993ce4e6
      Bruce Momjian authored
      	--details-after
      	--master-only
      	--oldest-first
      993ce4e6
    • Tom Lane's avatar
      Fix syslogger's rotation disable/re-enable logic. · 537b2669
      Tom Lane authored
      If it fails to open a new log file, the syslogger assumes there's something
      wrong with its parameters (such as log_directory), and stops attempting
      automatic time-based or size-based log file rotations.  Sending it SIGHUP
      is supposed to start that up again.  However, the original coding for that
      was really bogus, involving clobbering a couple of GUC variables and hoping
      that SIGHUP processing would restore them.  Get rid of that technique in
      favor of maintaining a separate flag showing we've turned rotation off.
      Per report from Mark Kirkwood.
      
      Also, the syslogger will automatically attempt to create the log_directory
      directory if it doesn't exist, but that was only happening at startup.
      For consistency and ease of use, it should do the same whenever the value
      of log_directory is changed by SIGHUP.
      
      Back-patch to all supported branches.
      537b2669
    • 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
  5. 26 Apr, 2012 6 commits
    • Tom Lane's avatar
      Improve documentation around historical calendar rules. · 92df2203
      Tom Lane authored
      Get rid of section 8.5.6 (Date/Time Internals), which appears to confuse
      people more than it helps, and anyway discussion of Postgres' internal
      datetime calculation methods seems pretty out of place here.  Instead,
      make datatype.sgml just say that we follow the Gregorian calendar (a bit
      of specification not previously present anywhere in that chapter :-()
      and link to the History of Units appendix for more info.  Do some mild
      editorialization on that appendix, too, to make it clearer that we are
      following proleptic Gregorian calendar rules rather than anything more
      historically accurate.
      
      Per a question from Florence Cousin and subsequent discussion in
      pgsql-docs.
      92df2203
    • Tom Lane's avatar
      Fix oversight in recent parameterized-path patch. · 7c85aa39
      Tom Lane authored
      bitmap_scan_cost_est() has to be able to cope with a BitmapOrPath, but
      I'd taken a shortcut that didn't work for that case.  Noted by Heikki.
      Add some regression tests since this area is evidently under-covered.
      7c85aa39
    • Peter Eisentraut's avatar
      PL/Python: Accept strings in functions returning composite types · ba3e4157
      Peter Eisentraut authored
      Before 9.1, PL/Python functions returning composite types could return
      a string and it would be parsed using record_in.  The 9.1 changes made
      PL/Python only expect dictionaries, tuples, or objects supporting
      getattr as output of composite functions, resulting in a regression
      and a confusing error message, as the strings were interpreted as
      sequences and the code for transforming lists to database tuples was
      used.  Fix this by treating strings separately as before, before
      checking for the other types.
      
      The reason why it's important to support string to database tuple
      conversion is that trigger functions on tables with composite columns
      get the composite row passed in as a string (from record_out).
      Without supporting converting this back using record_in, this makes it
      impossible to implement pass-through behavior for these columns, as
      PL/Python no longer accepts strings for composite values.
      
      A better solution would be to fix the code that transforms composite
      inputs into Python objects to produce dictionaries that would then be
      correctly interpreted by the Python->PostgreSQL counterpart code.  But
      that would be too invasive to backpatch to 9.1, and it is too late in
      the 9.2 cycle to attempt it.  It should be revisited in the future,
      though.
      
      Reported as bug #6559 by Kirill Simonov.
      
      Jan Urbański
      ba3e4157
    • Peter Eisentraut's avatar
      psql: Tab completion updates · cc71ceab
      Peter Eisentraut authored
      Add/complete support for:
      
      - ALTER DOMAIN / VALIDATE CONSTRAINT
      - ALTER DOMAIN / RENAME
      - ALTER DOMAIN / RENAME CONSTRAINT
      - ALTER TABLE / RENAME CONSTRAINT
      cc71ceab
    • Tom Lane's avatar
      Modify create_index regression test to avoid intermittent failures. · d6d5f67b
      Tom Lane authored
      We have been seeing intermittent buildfarm failures due to a query
      sometimes not using an index-only scan plan, because a background
      auto-ANALYZE prevented the table's all-visible bits from being set
      immediately, thereby causing the estimated cost of an index-only scan
      to go up considerably.  Adjust the test case so that a bitmap index scan is
      preferred instead, which serves equally well for the purpose the test case
      is actually meant for.  (Of course, it would be better to eliminate the
      interference from auto-ANALYZE, but I see no low-risk way to do that,
      so any such fix will have to be left for 9.3 or later.)
      d6d5f67b
    • 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
  6. 25 Apr, 2012 4 commits
    • Tom Lane's avatar
      Fix edge-case behavior of pg_next_dst_boundary(). · c62b8eaa
      Tom Lane authored
      Due to rather sloppy thinking (on my part, I'm afraid) about the
      appropriate behavior for boundary conditions, pg_next_dst_boundary() gave
      undefined, platform-dependent results when the input time is exactly the
      last recorded DST transition time for the specified time zone, as a result
      of fetching values one past the end of its data arrays.
      
      Change its specification to be that it always finds the next DST boundary
      *after* the input time, and adjust code to match that.  The sole existing
      caller, DetermineTimeZoneOffset, doesn't actually care about this
      distinction, since it always uses a probe time earlier than the instant
      that it does care about.  So it seemed best to me to change the API to make
      the result=1 and result=0 cases more consistent, specifically to ensure
      that the "before" outputs always describe the state at the given time,
      rather than hacking the code to obey the previous API comment exactly.
      
      Per bug #6605 from Sergey Burladyan.  Back-patch to all supported versions.
      c62b8eaa
    • Robert Haas's avatar
      Remove prototype for nonexistent function. · ca1e1a8d
      Robert Haas authored
      ca1e1a8d
    • Tom Lane's avatar
      Another trivial comment-typo fix. · 9873001e
      Tom Lane authored
      9873001e
    • Peter Eisentraut's avatar
      PL/Python: Improve error messages · 65ca8e68
      Peter Eisentraut authored
      65ca8e68
  7. 24 Apr, 2012 9 commits
  8. 22 Apr, 2012 1 commit
  9. 21 Apr, 2012 3 commits
    • Tom Lane's avatar
      Use fuzzy not exact cost comparison for the final tie-breaker in add_path. · 33e99153
      Tom Lane authored
      Instead of an exact cost comparison, use a fuzzy comparison with 1e-10
      delta after all other path metrics have proved equal.  This is to avoid
      having platform-specific roundoff behaviors determine the choice when
      two paths are really the same to our cost estimators.  Adjust the
      recently-added test case that made it obvious we had a problem here.
      33e99153
    • 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
    • Tom Lane's avatar
      Adjust join_search_one_level's handling of clauseless joins. · 1f036300
      Tom Lane authored
      For an initial relation that lacks any join clauses (that is, it has to be
      cartesian-product-joined to the rest of the query), we considered only
      cartesian joins with initial rels appearing later in the initial-relations
      list.  This creates an undesirable dependency on FROM-list order.  We would
      never fail to find a plan, but perhaps we might not find the best available
      plan.  Noted while discussing the logic with Amit Kapila.
      
      Improve the comments a bit in this area, too.
      
      Arguably this is a bug fix, but given the lack of complaints from the
      field I'll refrain from back-patching.
      1f036300
  10. 19 Apr, 2012 2 commits
    • 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
    • Peter Eisentraut's avatar
      Untabify DSSSL and XSL files and add to check-tabs target · cd1f4db4
      Peter Eisentraut authored
      Like with SGML files, using tabs in these files is confusing and
      unnecessary.
      cd1f4db4
  11. 18 Apr, 2012 1 commit
    • Robert Haas's avatar
      Remove bogus comment from HeapTupleSatisfiesNow. · 293ec33c
      Robert Haas authored
      This has been wrong for a really long time.  We don't use two-phase
      locking to protect against serialization anomalies.
      
      Per discussion on pgsql-hackers about 2011-03-07; original report
      by Dan Ports.
      293ec33c