1. 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
  2. 18 Apr, 2012 9 commits
  3. 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
  4. 16 Apr, 2012 4 commits
  5. 15 Apr, 2012 2 commits
  6. 14 Apr, 2012 5 commits
  7. 13 Apr, 2012 9 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
    • Robert Haas's avatar
      Grammar corrections. · 7167fcd2
      Robert Haas authored
      Christoph Berg
      7167fcd2
    • Robert Haas's avatar
      Fix typo in comment. · 61167bfa
      Robert Haas authored
      61167bfa
    • Robert Haas's avatar
      Update lazy_scan_heap header comment. · 5630eddf
      Robert Haas authored
      The previous comment described how things worked in PostgreSQL 8.2
      and prior.
      5630eddf
  8. 12 Apr, 2012 2 commits
    • Tom Lane's avatar
      Assorted spelling corrections. · 81e3e4fd
      Tom Lane authored
      Thom Brown
      81e3e4fd
    • Tom Lane's avatar
      Fix cost estimation for indexscan filter conditions. · 732bfa24
      Tom Lane authored
      cost_index's method for estimating per-tuple costs of evaluating filter
      conditions (a/k/a qpquals) was completely wrong in the presence of derived
      indexable conditions, such as range conditions derived from a LIKE clause.
      This was largely masked in common cases as a result of all simple operator
      clauses having about the same costs, but it could show up in a big way when
      dealing with functional indexes containing expensive functions, as seen for
      example in bug #6579 from Istvan Endredy.  Rejigger the calculation to give
      sane answers when the indexquals aren't a subset of the baserestrictinfo
      list.  As a side benefit, we now do the calculation properly for cases
      involving join clauses (ie, parameterized indexscans), which we always
      overestimated before.
      
      There are still cases where this is an oversimplification, such as clauses
      that can be dropped because they are implied by a partial index's
      predicate.  But we've never accounted for that in cost estimates before,
      and I'm not convinced it's worth the cycles to try to do so.
      732bfa24
  9. 11 Apr, 2012 3 commits
    • Tom Lane's avatar
      Silently ignore any nonexistent schemas that are listed in search_path. · 880bfc32
      Tom Lane authored
      Previously we attempted to throw an error or at least warning for missing
      schemas, but this was done inconsistently because of implementation
      restrictions (in many cases, GUC settings are applied outside transactions
      so that we can't do system catalog lookups).  Furthermore, there were
      exceptions to the rule even in the beginning, and we'd been poking more
      and more holes in it as time went on, because it turns out that there are
      lots of use-cases for having some irrelevant items in a common search_path
      value.  It seems better to just adopt a philosophy similar to what's always
      been done with Unix PATH settings, wherein nonexistent or unreadable
      directories are silently ignored.
      
      This commit also fixes the documentation to point out that schemas for
      which the user lacks USAGE privilege are silently ignored.  That's always
      been true but was previously not documented.
      
      This is mostly in response to Robert Haas' complaint that 9.1 started to
      throw errors or warnings for missing schemas in cases where prior releases
      had not.  We won't adopt such a significant behavioral change in a back
      branch, so something different will be needed in 9.1.
      880bfc32
    • Alvaro Herrera's avatar
      Accept postgres:// URIs in libpq connection functions · b035cb9d
      Alvaro Herrera authored
      postgres:// URIs are an attempt to "stop the bleeding" in this general
      area that has been said to occur due to external projects adopting their
      own syntaxes.  The syntaxes supported by this patch:
      
       postgres://[user[:pwd]@][unix-socket][:port[/dbname]][?param1=value1&...]
       postgres://[user[:pwd]@][net-location][:port][/dbname][?param1=value1&...]
      
      should be enough to cover most interesting cases without having to
      resort to "param=value" pairs, but those are provided for the cases that
      need them regardless.
      
      libpq documentation has been shuffled around a bit, to avoid stuffing
      all the format details into the PQconnectdbParams description, which was
      already a bit overwhelming.  The list of keywords has moved to its own
      subsection, and the details on the URI format live in another subsection.
      
      This includes a simple test program, as requested in discussion, to
      ensure that interesting corner cases continue to work appropriately in
      the future.
      
      Author: Alexander Shulgin
      Some tweaking by Álvaro Herrera, Greg Smith, Daniel Farina, Peter Eisentraut
      Reviewed by Robert Haas, Alexey Klyukin (offlist), Heikki Linnakangas,
      Marko Kreen, and others
      
      Oh, it also supports postgresql:// but that's probably just an accident.
      b035cb9d
    • Tom Lane's avatar
      Make pg_tablespace_location(0) return the database's default tablespace. · 3769fa5f
      Tom Lane authored
      This definition is convenient when applying the function to the
      reltablespace column of pg_class, since that's what zero means there;
      and it doesn't interfere with any other plausible use of the function.
      Per gripe from Bruce Momjian.
      3769fa5f
  10. 10 Apr, 2012 2 commits