1. 14 Aug, 2008 4 commits
  2. 13 Aug, 2008 1 commit
  3. 12 Aug, 2008 2 commits
  4. 11 Aug, 2008 2 commits
    • Heikki Linnakangas's avatar
      Relation forks patch requires a catversion bump due to changes in the format · a879443e
      Heikki Linnakangas authored
      of some WAL records, and two-phase state files, which I forgot.
      a879443e
    • Heikki Linnakangas's avatar
      Introduce the concept of relation forks. An smgr relation can now consist · 3f0e808c
      Heikki Linnakangas authored
      of multiple forks, and each fork can be created and grown separately.
      
      The bulk of this patch is about changing the smgr API to include an extra
      ForkNumber argument in every smgr function. Also, smgrscheduleunlink and
      smgrdounlink no longer implicitly call smgrclose, because other forks might
      still exist after unlinking one. The callers of those functions have been
      modified to call smgrclose instead.
      
      This patch in itself doesn't have any user-visible effect, but provides the
      infrastructure needed for upcoming patches. The additional forks envisioned
      are a rewritten FSM implementation that doesn't rely on a fixed-size shared
      memory block, and a visibility map to allow skipping portions of a table in
      VACUUM that have no dead tuples.
      3f0e808c
  5. 10 Aug, 2008 1 commit
    • Tom Lane's avatar
      Fix corner-case bug introduced with HOT: if REINDEX TABLE pg_class (or a · eca13886
      Tom Lane authored
      REINDEX DATABASE including same) is done before a session has done any other
      update on pg_class, the pg_class relcache entry was left with an incorrect
      setting of rd_indexattr, because the indexed-attributes set would be first
      demanded at a time when we'd forced a partial list of indexes into the
      pg_class entry, and it would remain cached after that.  This could result
      in incorrect decisions about HOT-update safety later in the same session.
      In practice, since only pg_class_relname_nsp_index would be missed out,
      only ALTER TABLE RENAME and ALTER TABLE SET SCHEMA could trigger a problem.
      Per report and test case from Ondrej Jirman.
      eca13886
  6. 08 Aug, 2008 1 commit
    • Tom Lane's avatar
      Install checks in executor startup to ensure that the tuples produced by an · 30fd8ec7
      Tom Lane authored
      INSERT or UPDATE will match the target table's current rowtype.  In pre-8.3
      releases inconsistency can arise with stale cached plans, as reported by
      Merlin Moncure.  (We patched the equivalent hazard on the SELECT side in Feb
      2007; I'm not sure why we thought there was no risk on the insertion side.)
      In 8.3 and HEAD this problem should be impossible due to plan cache
      invalidation management, but it seems prudent to make the check anyway.
      
      Back-patch as far as 8.0.  7.x versions lack ALTER COLUMN TYPE, so there
      seems no way to abuse a stale plan comparably.
      30fd8ec7
  7. 07 Aug, 2008 3 commits
    • Tom Lane's avatar
      Improve INTERSECT/EXCEPT hashing by realizing that we don't need to make any · af95d7aa
      Tom Lane authored
      hashtable entries for tuples that are found only in the second input: they
      can never contribute to the output.  Furthermore, this implies that the
      planner should endeavor to put first the smaller (in number of groups) input
      relation for an INTERSECT.  Implement that, and upgrade prepunion's estimation
      of the number of rows returned by setops so that there's some amount of sanity
      in the estimate of which one is smaller.
      af95d7aa
    • Tom Lane's avatar
      Support hashing for duplicate-elimination in INTERSECT and EXCEPT queries. · 368df304
      Tom Lane authored
      This completes my project of improving usage of hashing for duplicate
      elimination (aggregate functions with DISTINCT remain undone, but that's
      for some other day).
      
      As with the previous patches, this means we can INTERSECT/EXCEPT on datatypes
      that can hash but not sort, and it means that INTERSECT/EXCEPT without ORDER
      BY are no longer certain to produce sorted output.
      368df304
    • Tom Lane's avatar
      Teach the system how to use hashing for UNION. (INTERSECT/EXCEPT will follow, · 2d1d96b1
      Tom Lane authored
      but seem like a separate patch since most of the remaining work is on the
      executor side.)  I took the opportunity to push selection of the grouping
      operators for set operations into the parser where it belongs.  Otherwise this
      is just a small exercise in making prepunion.c consider both alternatives.
      
      As with the recent DISTINCT patch, this means we can UNION on datatypes that
      can hash but not sort, and it means that UNION without ORDER BY is no longer
      certain to produce sorted output.
      2d1d96b1
  8. 05 Aug, 2008 7 commits
    • Tom Lane's avatar
      Do not allow Unique nodes to be scanned backwards. The code claimed that it · 3d40d5e7
      Tom Lane authored
      would work, but in fact it didn't return the same rows when moving backwards
      as when moving forwards.  This would have no visible effect in a DISTINCT
      query (at least assuming the column datatypes use a strong definition of
      equality), but it gave entirely wrong answers for DISTINCT ON queries.
      3d40d5e7
    • Tom Lane's avatar
      Department of second thoughts: fix newly-added code in planner.c to make real · c78248c9
      Tom Lane authored
      sure that DISTINCT ON does what it's supposed to, ie, sort by the full ORDER
      BY list before unique-ifying.  The error seems masked in simple cases by the
      fact that query_planner won't return query pathkeys that only partially match
      the requested sort order, but I wouldn't want to bet that it couldn't be
      exposed in some way or other.
      c78248c9
    • Tom Lane's avatar
    • Tom Lane's avatar
      In ReadOrZeroBuffer (and related entry points), don't bother to call · d8b04d5f
      Tom Lane authored
      PageHeaderIsValid when we zero the buffer instead of reading the page in.
      The actual performance improvement is probably marginal since this function
      isn't very heavily used, but a cycle saved is a cycle earned.
      
      Zdenek Kotala
      d8b04d5f
    • Magnus Hagander's avatar
      Move pgstat.tmp into a temporary directory under $PGDATA named pg_stat_tmp. · 70d75697
      Magnus Hagander authored
      This allows the use of a ramdrive (either through mount or symlink) for
      the temporary file that's written every half second, which should
      reduce I/O.
      
      On server shutdown/startup, the file is written to the old location in
      the global directory, to preserve data across restarts.
      
      Bump catversion since the $PGDATA directory layout changed.
      70d75697
    • Tom Lane's avatar
      Fix some message style guideline violations in pg_regress, as well as · 7e61edf2
      Tom Lane authored
      some failures to expose messages for translation.
      7e61edf2
    • Tom Lane's avatar
      Improve SELECT DISTINCT to consider hash aggregation, as well as sort/uniq, · be3b265c
      Tom Lane authored
      as methods for implementing the DISTINCT step.  This eliminates the former
      performance gap between DISTINCT and GROUP BY, and also makes it possible
      to do SELECT DISTINCT on datatypes that only support hashing not sorting.
      
      SELECT DISTINCT ON is still always implemented by sorting; it would take
      executor changes to support hashing that, and it's not clear it's worth
      the trouble.
      
      This is a release-note-worthy incompatibility from previous PG versions,
      since SELECT DISTINCT can no longer be counted on to deliver sorted output
      without explicitly saying ORDER BY.  (Anyone who can't cope with that
      can consider turning off enable_hashagg.)
      
      Several regression test queries needed to have ORDER BY added to preserve
      stable output order.  I fixed the ones that manifested here, but there
      might be some other cases that show up on other platforms.
      be3b265c
  9. 04 Aug, 2008 1 commit
    • Tom Lane's avatar
      Improve CREATE/DROP/RENAME DATABASE so that when failing because the source · 4abd7b49
      Tom Lane authored
      or target database is being accessed by other users, it tells you whether
      the "other users" are live sessions or uncommitted prepared transactions.
      (Indeed, it tells you exactly how many of each, but that's mostly just
      because it was easy to do so.)  This should help forestall the gotcha of
      not realizing that a prepared transaction is what's blocking the command.
      Per discussion.
      4abd7b49
  10. 03 Aug, 2008 3 commits
  11. 02 Aug, 2008 1 commit
    • Tom Lane's avatar
      Rearrange the querytree representation of ORDER BY/GROUP BY/DISTINCT items · 95113047
      Tom Lane authored
      as per my recent proposal:
      
      1. Fold SortClause and GroupClause into a single node type SortGroupClause.
      We were already relying on them to be struct-equivalent, so using two node
      tags wasn't accomplishing much except to get in the way of comparing items
      with equal().
      
      2. Add an "eqop" field to SortGroupClause to carry the associated equality
      operator.  This is cheap for the parser to get at the same time it's looking
      up the sort operator, and storing it eliminates the need for repeated
      not-so-cheap lookups during planning.  In future this will also let us
      represent GROUP/DISTINCT operations on datatypes that have hash opclasses
      but no btree opclasses (ie, they have equality but no natural sort order).
      The previous representation simply didn't work for that, since its only
      indicator of comparison semantics was a sort operator.
      
      3. Add a hasDistinctOn boolean to struct Query to explicitly record whether
      the distinctClause came from DISTINCT or DISTINCT ON.  This allows removing
      some complicated and not 100% bulletproof code that attempted to figure
      that out from the distinctClause alone.
      
      This patch doesn't in itself create any new capability, but it's necessary
      infrastructure for future attempts to use hash-based grouping for DISTINCT
      and UNION/INTERSECT/EXCEPT.
      95113047
  12. 01 Aug, 2008 4 commits
  13. 31 Jul, 2008 3 commits
    • Tom Lane's avatar
      Fix parser so that we don't modify the user-written ORDER BY list in order · 63247bec
      Tom Lane authored
      to represent DISTINCT or DISTINCT ON.  This gets rid of a longstanding
      annoyance that a view or rule using SELECT DISTINCT will be dumped out
      with an overspecified ORDER BY list, and is one small step along the way
      to decoupling DISTINCT and ORDER BY enough so that hash-based implementation
      of DISTINCT will be possible.  In passing, improve transformDistinctClause
      so that it doesn't reject duplicate DISTINCT ON items, as was reported by
      Steve Midgley a couple weeks ago.
      63247bec
    • Bruce Momjian's avatar
      Add URL to: · b1fb3b2a
      Bruce Momjian authored
      * Consider decreasing the I/O caused by updating tuple hint bits
      
      >   http://archives.postgresql.org/pgsql-patches/2008-07/msg00199.php
      b1fb3b2a
    • Tom Lane's avatar
      Require superuser privilege to create base types (but not composites, enums, · 7bd7b200
      Tom Lane authored
      or domains).  This was already effectively required because you had to own
      the I/O functions, and the I/O functions pretty much have to be written in
      C since we don't let PL functions take or return cstring.  But given the
      possible security consequences of a malicious type definition, it seems
      prudent to enforce superuser requirement directly.  Per recent discussion.
      7bd7b200
  14. 30 Jul, 2008 4 commits
    • Tom Lane's avatar
      Allow I/O conversion casts to be applied to or from any type that is a member · c8572986
      Tom Lane authored
      of the STRING type category, thereby opening up the mechanism for user-defined
      types.  This is mainly for the benefit of citext, though; there aren't likely
      to be a lot of types that are all general-purpose character strings.
      Per discussion with David Wheeler.
      c8572986
    • Tom Lane's avatar
      Flip the default typispreferred setting from true to false. This affects · 7df49cef
      Tom Lane authored
      only type categories in which the previous coding made *every* type
      preferred; so there is no change in effective behavior, because the function
      resolution rules only do something different when faced with a choice
      between preferred and non-preferred types in the same category.  It just
      seems safer and less surprising to have CREATE TYPE default to non-preferred
      status ...
      7df49cef
    • Tom Lane's avatar
      Adjust citext to make use of the new ability to declare its type category: · 42be2c79
      Tom Lane authored
      by putting it into the standard string category, we cause casts from citext
      to text to be recognized as "preferred" casts.  This eliminates the need
      for creation of alias functions and operators that only serve to prevent
      ambiguous-function errors; get rid of the ones that were in the original
      commit.
      42be2c79
    • Tom Lane's avatar
      Replace the hard-wired type knowledge in TypeCategory() and IsPreferredType() · bac3e836
      Tom Lane authored
      with system catalog lookups, as was foreseen to be necessary almost since
      their creation.  Instead put the information into two new pg_type columns,
      typcategory and typispreferred.  Add support for setting these when
      creating a user-defined base type.
      
      The category column is just a "char" (i.e. a poor man's enum), allowing
      a crude form of user extensibility of the category list: just use an
      otherwise-unused character.  This seems sufficient for foreseen uses,
      but we could upgrade to having an actual category catalog someday, if
      there proves to be a huge demand for custom type categories.
      
      In this patch I have attempted to hew exactly to the behavior of the
      previous hardwired logic, except for introducing new type categories for
      arrays, composites, and enums.  In particular the default preferred state
      for user-defined types remains TRUE.  That seems worth revisiting, but it
      should be done as a separate patch from introducing the infrastructure.
      Likewise, any adjustment of the standard set of categories should be done
      separately.
      bac3e836
  15. 29 Jul, 2008 3 commits