1. 24 Apr, 2012 6 commits
    • Robert Haas's avatar
      Casts to or from a domain type are ignored; warn and document. · 3ce7f18e
      Robert Haas authored
      Prohibiting this outright would break dumps taken from older versions
      that contain such casts, which would create far more pain than is
      justified here.
      
      Per report by Jaime Casanova and subsequent discussion.
      3ce7f18e
    • Robert Haas's avatar
      Another typographical correction. · e4f06b70
      Robert Haas authored
      Noted by Guillaume Smet.
      e4f06b70
    • Robert Haas's avatar
      Lots of doc corrections. · 5d4b60f2
      Robert Haas authored
      Josh Kupershmidt
      5d4b60f2
    • Robert Haas's avatar
      Rearrange lazy_scan_heap to avoid visibility map race conditions. · 7ab9b2f3
      Robert Haas authored
      We must set the visibility map bit before releasing our exclusive lock
      on the heap page; otherwise, someone might clear the heap page bit
      before we set the visibility map bit, leading to a situation where the
      visibility map thinks the page is all-visible but it's really not.
      
      This problem has existed since 8.4, but it wasn't critical before we
      had index-only scans, since the worst case scenario was that the page
      wouldn't get vacuumed until the next scan_all vacuum.
      
      Along the way, a couple of minor, related improvements: (1) if we
      pause the heap scan to do an index vac cycle, release any visibility
      map page we're holding, since really long-running pins are not good
      for a variety of reasons; and (2) warn if we see a page that's marked
      all-visible in the visibility map but not on the page level, since
      that should never happen any more (it was allowed in previous
      releases, but not in 9.2).
      7ab9b2f3
    • Robert Haas's avatar
      Reduce hash size for compute_array_stats, compute_tsvector_stats. · 85efd5f0
      Robert Haas authored
      The size is only a hint, but a big hint chews up a lot of memory without
      apparently improving performance much.
      
      Analysis and patch by Noah Misch.
      85efd5f0
    • Robert Haas's avatar
      Minor improvements for CHECK NO INHERIT documentation. · 9d435d57
      Robert Haas authored
      Fix typo spotted by Thom Brown, and improve wording in another area
      where Thom spotted a typo.
      9d435d57
  2. 22 Apr, 2012 1 commit
  3. 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
  4. 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
  5. 18 Apr, 2012 9 commits
  6. 17 Apr, 2012 2 commits
    • Andrew Dunstan's avatar
      Don't override arguments set via options with positional arguments. · 1b37a8c3
      Andrew Dunstan authored
      A number of utility programs were rather careless about paremeters
      that can be set via both an option argument and a positional
      argument. This leads to results which can violate the Principal
      Of Least Astonishment. These changes refuse to use positional
      arguments to override settings that have been made via positional
      arguments. The changes are backpatched to all live branches.
      1b37a8c3
    • Heikki Linnakangas's avatar
      Don't wait for the commit record to be replicated if we wrote no WAL. · fe546f3d
      Heikki Linnakangas authored
      When using synchronous replication, we waited for the commit record to be
      replicated, but if we our transaction didn't write any other WAL records,
      that's not required because we don't even flush the WAL locally to disk in
      that case. This lead to long waits when committing a transaction that only
      modified a temporary table. Bug spotted by Thom Brown.
      fe546f3d
  7. 16 Apr, 2012 4 commits
  8. 15 Apr, 2012 2 commits
  9. 14 Apr, 2012 5 commits
  10. 13 Apr, 2012 6 commits
    • Peter Eisentraut's avatar
      Fix typo · f3a3aac8
      Peter Eisentraut authored
      Etsuro Fujita
      f3a3aac8
    • Robert Haas's avatar
    • Tom Lane's avatar
      Remove the "last ditch" code path in join_search_one_level(). · e54b10a6
      Tom Lane authored
      So far as I can tell, it is no longer possible for this heuristic to do
      anything useful, because the new weaker definition of
      have_relevant_joinclause means that any relation with a joinclause must be
      considered joinable to at least one other relation.  It would still be
      possible for the code block to be entered, for example if there are join
      order restrictions that prevent any join of the current level from being
      formed; but in that case it's just a waste of cycles to attempt to form
      cartesian joins, since the restrictions will still apply.
      
      Furthermore, IMO the existence of this code path can mask bugs elsewhere;
      we would have noticed the problem with cartesian joins a lot sooner if
      this code hadn't compensated for it in the simplest case.
      
      Accordingly, let's remove it and see what happens.  I'm committing this
      separately from the prerequisite changes in have_relevant_joinclause,
      just to make the question easier to revisit if there is some fault in
      my logic.
      e54b10a6
    • Tom Lane's avatar
      Weaken the planner's tests for relevant joinclauses. · e3ffd05b
      Tom Lane authored
      We should be willing to cross-join two small relations if that allows us
      to use an inner indexscan on a large relation (that is, the potential
      indexqual for the large table requires both smaller relations).  This
      worked in simple cases but fell apart as soon as there was a join clause
      to a fourth relation, because the existence of any two-relation join clause
      caused the planner to not consider clauseless joins between other base
      relations.  The added regression test shows an example case adapted from
      a recent complaint from Benoit Delbosc.
      
      Adjust have_relevant_joinclause, have_relevant_eclass_joinclause, and
      has_relevant_eclass_joinclause to consider that a join clause mentioning
      three or more relations is sufficient grounds for joining any subset of
      those relations, even if we have to do so via a cartesian join.  Since such
      clauses are relatively uncommon, this shouldn't affect planning speed on
      typical queries; in fact it should help a bit, because the latter two
      functions in particular get significantly simpler.
      
      Although this is arguably a bug fix, I'm not going to risk back-patching
      it, since it might have currently-unforeseen consequences.
      e3ffd05b
    • 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
    • Peter Eisentraut's avatar