1. 05 Aug, 2010 6 commits
    • Tom Lane's avatar
      Add a very specific hint for the case that we're unable to locate a function · 1e4c050b
      Tom Lane authored
      matching a call like f(x, ORDER BY y,z).  It could be that what the user
      really wants is f(x,z ORDER BY y).  We now have pretty conclusive evidence
      that many people won't understand this problem without concrete guidance,
      so give it to them.  Per further discussion of the string_agg() problem.
      1e4c050b
    • Peter Eisentraut's avatar
    • Tom Lane's avatar
      Remove the single-argument form of string_agg(). It added nothing much in · b0c451e1
      Tom Lane authored
      functionality, while creating an ambiguity in usage with ORDER BY that at
      least two people have already gotten seriously confused by.  Also, add an
      opr_sanity test to check that we don't in future violate the newly minted
      policy of not having built-in aggregates with the same name and different
      numbers of parameters.  Per discussion of a complaint from Thom Brown.
      b0c451e1
    • Robert Haas's avatar
      Standardize get_whatever_oid functions for other object types. · fd1843ff
      Robert Haas authored
      - Rename TSParserGetPrsid to get_ts_parser_oid.
      - Rename TSDictionaryGetDictid to get_ts_dict_oid.
      - Rename TSTemplateGetTmplid to get_ts_template_oid.
      - Rename TSConfigGetCfgid to get_ts_config_oid.
      - Rename FindConversionByName to get_conversion_oid.
      - Rename GetConstraintName to get_constraint_oid.
      - Add new functions get_opclass_oid, get_opfamily_oid, get_rewrite_oid,
        get_rewrite_oid_without_relid, get_trigger_oid, and get_cast_oid.
      
      The name of each function matches the corresponding catalog.
      
      Thanks to KaiGai Kohei for the review.
      fd1843ff
    • Robert Haas's avatar
      Standardize get_whatever_oid functions for object types with · 2a6ef344
      Robert Haas authored
      unqualified names.
      
      - Add a missing_ok parameter to get_tablespace_oid.
      - Avoid duplicating get_tablespace_od guts in objectNamesToOids.
      - Add a missing_ok parameter to get_database_oid.
      - Replace get_roleid and get_role_checked with get_role_oid.
      - Add get_namespace_oid, get_language_oid, get_am_oid.
      - Refactor existing code to use new interfaces.
      
      Thanks to KaiGai Kohei for the review.
      2a6ef344
    • Peter Eisentraut's avatar
      Add xmlexists function · 641459f2
      Peter Eisentraut authored
      by Mike Fowler, reviewed by Peter Eisentraut
      641459f2
  2. 04 Aug, 2010 4 commits
  3. 03 Aug, 2010 12 commits
  4. 02 Aug, 2010 6 commits
  5. 01 Aug, 2010 5 commits
    • Tom Lane's avatar
      Fix ANALYZE's ancient deficiency of not trying to collect stats for expression · 67becf8d
      Tom Lane authored
      indexes when the index column type (the opclass opckeytype) is different from
      the expression's datatype.  When coded, this limitation wasn't worth worrying
      about because we had no intelligence to speak of in stats collection for the
      datatypes used by such opclasses.  However, now that there's non-toy
      estimation capability for tsvector queries, it amounts to a bug that ANALYZE
      fails to do this.
      
      The fix changes struct VacAttrStats, and therefore constitutes an API break
      for custom typanalyze functions.  Therefore we can't back-patch it into
      released branches, but it was agreed that 9.0 isn't yet frozen hard enough
      to make such a change unacceptable.  Ergo, back-patch to 9.0 but no further.
      The API break had better be mentioned in 9.0 release notes.
      67becf8d
    • Tom Lane's avatar
      Add some knowledge about prefix matches to tsmatchsel(). It's not terribly · 97532f7c
      Tom Lane authored
      bright, but it beats assuming that a prefix match behaves identically to an
      exact match, which is what the code was doing before :-(.  Noted while
      experimenting with Artur Dobrowski's example.
      97532f7c
    • Tom Lane's avatar
      Fix an additional set of problems in GIN's handling of lossy page pointers. · d4fe61b0
      Tom Lane authored
      Although the key-combining code claimed to work correctly if its input
      contained both lossy and exact pointers for a single page in a single TID
      stream, in fact this did not work, and could not work without pretty
      fundamental redesign.  Modify keyGetItem so that it will not return such a
      stream, by handling lossy-pointer cases a bit more explicitly than we did
      before.
      
      Per followup investigation of a gripe from Artur Dabrowski.
      An example of a query that failed given his data set is
      select count(*) from search_tab where
      (to_tsvector('german', keywords ) @@ to_tsquery('german', 'ee:* | dd:*')) and
      (to_tsvector('german', keywords ) @@ to_tsquery('german', 'aa:*'));
      
      Back-patch to 8.4 where the lossy pointer code was introduced.
      d4fe61b0
    • Tom Lane's avatar
      Rewrite the rbtree routines so that an RBNode is the first field of the · 0454f131
      Tom Lane authored
      struct representing a tree entry, rather than being a separately allocated
      piece of storage.  This API is at least as clean as the old one (if not
      more so --- there were some bizarre choices in there) and it permits a
      very substantial memory savings, on the order of 2X in ginbulk.c's usage.
      
      Also, fix minor memory leaks in code called by ginEntryInsert, in
      particular in ginInsertValue and entryFillRoot, as well as ginEntryInsert
      itself.  These leaks resulted in the GIN index build context continuing
      to bloat even after we'd filled it to maintenance_work_mem and started
      to dump data out to the index.
      
      In combination these fixes restore the GIN index build code to honoring
      the maintenance_work_mem limit about as well as it did in 8.4.  Speed
      seems on par with 8.4 too, maybe even a bit faster, for a non-pathological
      case in which HEAD was formerly slower.
      
      Back-patch to 9.0 so we don't have a performance regression from 8.4.
      0454f131
    • Robert Haas's avatar
      Make psql distinguish between unique indices and unique constraints. · afc2900f
      Robert Haas authored
      Josh Kupershmidt.  Reviewing and kibitzing by Kevin Grittner and me.
      afc2900f
  6. 31 Jul, 2010 2 commits
    • Tom Lane's avatar
      Tweak tsmatchsel() so that it examines the structure of the tsquery whenever · b8c798eb
      Tom Lane authored
      possible (ie, whenever the tsquery is a constant), even when no statistics
      are available for the tsvector.  For example, foo @@ 'a & b'::tsquery
      can be expected to be more selective than foo @@ 'a'::tsquery, whether
      or not we know anything about foo.  We use DEFAULT_TS_MATCH_SEL as the assumed
      selectivity of individual query terms when no stats are available, then
      combine the terms according to the query's AND/OR structure as usual.
      
      Per experimentation with Artur Dabrowski's example.  (The fact that there
      are no stats available in that example is a problem in itself, but
      nonetheless tsmatchsel should be smarter about the case.)
      
      Back-patch to 8.4 to keep all versions of tsmatchsel() in sync.
      b8c798eb
    • Tom Lane's avatar
      Rewrite the key-combination logic in GIN's keyGetItem() and scanGetItem() · 2ab57e08
      Tom Lane authored
      routines to make them behave better in the presence of "lossy" index pointers.
      The previous coding was outright incorrect for some cases, as recently
      reported by Artur Dabrowski: scanGetItem would fail to return index entries in
      cases where one index key had multiple exact pointers on the same page as
      another key had a lossy pointer.  Also, keyGetItem was extremely inefficient
      for cases where a single index key generates multiple "entry" streams, such as
      an @@ operator with a multiple-clause tsquery.  The presence of a lossy page
      pointer in any one stream defeated its ability to use the opclass
      consistentFn, resulting in probing many heap pages that didn't really need to
      be visited.  In Artur's example case, a query like
      	WHERE tsvector @@ to_tsquery('a & b')
      was about 50X slower than the theoretically equivalent
      	WHERE tsvector @@ to_tsquery('a') AND tsvector @@ to_tsquery('b')
      The way that I chose to fix this was to have GIN call the consistentFn
      twice with both TRUE and FALSE values for the in-doubt entry stream,
      returning a hit if either call produces TRUE, but not if they both return
      FALSE.  The code handles this for the case of a single in-doubt entry stream,
      but punts (falling back to the stupid behavior) if there's more than one lossy
      reference to the same page.  The idea could be scaled up to deal with multiple
      lossy references, but I think that would probably be wasted complexity.  At
      least to judge by Artur's example, such cases don't occur often enough to be
      worth trying to optimize.
      
      Back-patch to 8.4.  8.3 did not have lossy GIN index pointers, so not
      subject to these problems.
      2ab57e08
  7. 30 Jul, 2010 1 commit
  8. 29 Jul, 2010 4 commits