1. 05 Aug, 2008 1 commit
    • 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
  2. 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
  3. 03 Aug, 2008 3 commits
  4. 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
  5. 01 Aug, 2008 4 commits
  6. 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
  7. 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
  8. 29 Jul, 2008 3 commits
  9. 26 Jul, 2008 1 commit
    • Tom Lane's avatar
      As noted by Andrew Gierth, there's really no need any more to force a junk · a77eaa6a
      Tom Lane authored
      filter to be used when INSERT or SELECT INTO has a plan that returns raw
      disk tuples.  The virtual-tuple-slot optimizations that were put in place
      awhile ago mean that ExecInsert has to do ExecMaterializeSlot, and that
      already copies the tuple if it's raw (and does so more efficiently than
      a junk filter, too).  So get rid of that logic.  This in turn means that
      we can throw away ExecMayReturnRawTuples, which wasn't used for any other
      purpose, and was always a kluge anyway.
      
      In passing, move a couple of SELECT-INTO-specific fields out of EState
      and into the private state of the SELECT INTO DestReceiver, as was foreseen
      in an old comment there.  Also make intorel_receive use ExecMaterializeSlot
      not ExecCopySlotTuple, for consistency with ExecInsert and to possibly save
      a tuple copy step in some cases.
      a77eaa6a
  10. 24 Jul, 2008 2 commits
  11. 23 Jul, 2008 3 commits
  12. 22 Jul, 2008 1 commit
  13. 21 Jul, 2008 3 commits
  14. 20 Jul, 2008 2 commits
  15. 19 Jul, 2008 1 commit
    • Tom Lane's avatar
      Avoid substituting NAMEDATALEN, FLOAT4PASSBYVAL, and FLOAT8PASSBYVAL into · 4b362c66
      Tom Lane authored
      the postgres.bki file during build, because we want that file to be entirely
      platform- and configuration-independent; else it can't safely be put into
      /usr/share on multiarch machines.  We can do the substitution during initdb,
      instead.  FLOAT4PASSBYVAL and FLOAT8PASSBYVAL are new breakage as of 8.4,
      while the NAMEDATALEN hazard has been there all along but I guess no one
      tripped over it.  Noticed while trying to build "universal" OS X binaries.
      4b362c66
  16. 18 Jul, 2008 7 commits
    • Tom Lane's avatar
      Adjust things so that the query_string of a cached plan and the sourceText of · a1c69235
      Tom Lane authored
      a portal are never NULL, but reliably provide the source text of the query.
      It turns out that there was only one place that was really taking a short-cut,
      which was the 'EXECUTE' utility statement.  That doesn't seem like a
      sufficiently critical performance hotspot to justify not offering a guarantee
      of validity of the portal source text.  Fix it to copy the source text over
      from the cached plan.  Add Asserts in the places that set up cached plans and
      portals to reject null source strings, and simplify a bunch of places that
      formerly needed to guard against nulls.
      
      There may be a few places that cons up statements for execution without
      having any source text at all; I found one such in ConvertTriggerToFK().
      It seems sufficient to inject a phony source string in such a case,
      for instance
              ProcessUtility((Node *) atstmt,
                             "(generated ALTER TABLE ADD FOREIGN KEY command)",
                             NULL, false, None_Receiver, NULL);
      
      We should take a second look at the usage of debug_query_string,
      particularly the recently added current_query() SQL function.
      
      ITAGAKI Takahiro and Tom Lane
      a1c69235
    • Tom Lane's avatar
      Provide a function hook to let plug-ins get control around ExecutorRun. · 6cc88f0a
      Tom Lane authored
      ITAGAKI Takahiro
      6cc88f0a
    • Bruce Momjian's avatar
      Properly document archive/restore command examples on Windows. · 8d7af890
      Bruce Momjian authored
      ITAGAKI Takahiro
      8d7af890
    • Bruce Momjian's avatar
    • Tom Lane's avatar
      Fix a race condition that I introduced into sinvaladt.c during the recent · dc02a481
      Tom Lane authored
      rewrite.  When called from SIInsertDataEntries, SICleanupQueue releases
      the write lock if it has to issue a kill() to signal some laggard backend.
      That still seems like a good idea --- but it's possible that by the time
      we get the lock back, there are no longer enough free message slots to
      satisfy SIInsertDataEntries' requirement.  Must recheck, and repeat the
      whole SICleanupQueue process if not.  Noted while reading code.
      dc02a481
    • Tom Lane's avatar
      Suppress compiler warning, and not incidentally make the code more · a4775a80
      Tom Lane authored
      robust.  The previous coding was quite risky because it was testing
      conditions different from 'is the array really allocated?'.
      a4775a80
    • Tom Lane's avatar
      Implement SQL-spec RETURNS TABLE syntax for functions. · 69a785b8
      Tom Lane authored
      (Unlike the original submission, this patch treats TABLE output parameters
      as being entirely equivalent to OUT parameters -- tgl)
      
      Pavel Stehule
      69a785b8