Skip to content
Snippets Groups Projects
  1. Nov 13, 2007
  2. Feb 27, 2006
  3. May 31, 2005
  4. Sep 13, 2003
  5. Jul 27, 2003
    • Bruce Momjian's avatar
      > Am Son, 2003-06-22 um 02.09 schrieb Joe Conway: · a265b7f7
      Bruce Momjian authored
      >>Sounds like all that's needed for your case. But to be complete, in
      >>addition to changing tablefunc.c we'd have to:
      >>1) come up with a new function call signature that makes sense and does
      >>not cause backward compatibility problems for other people
      >>2) make needed changes to tablefunc.sql.in
      >>3) adjust the README.tablefunc appropriately
      >>4) adjust the regression test for new functionality
      >>5) be sure we don't break any of the old cases
      >>
      >>If you want to submit a complete patch, it would be gratefully accepted
      >>-- for review at least ;-)
      >
      > Here's the patch, at least for steps 1-3
      
      Nabil Sayegh
      Joe Conway
      a265b7f7
  6. May 14, 2003
  7. Mar 20, 2003
    • Bruce Momjian's avatar
      Attached is an update to contrib/tablefunc. It implements a new hashed · 64d0b8b0
      Bruce Momjian authored
      version of crosstab. This fixes a major deficiency in real-world use of
      the original version. Easiest to undestand with an illustration:
      
      Data:
      -------------------------------------------------------------------
      select * from cth;
        id | rowid |        rowdt        |   attribute    |      val
      ----+-------+---------------------+----------------+---------------
         1 | test1 | 2003-03-01 00:00:00 | temperature    | 42
         2 | test1 | 2003-03-01 00:00:00 | test_result    | PASS
         3 | test1 | 2003-03-01 00:00:00 | volts          | 2.6987
         4 | test2 | 2003-03-02 00:00:00 | temperature    | 53
         5 | test2 | 2003-03-02 00:00:00 | test_result    | FAIL
         6 | test2 | 2003-03-02 00:00:00 | test_startdate | 01 March 2003
         7 | test2 | 2003-03-02 00:00:00 | volts          | 3.1234
      (7 rows)
      
      Original crosstab:
      -------------------------------------------------------------------
      SELECT * FROM crosstab(
         'SELECT rowid, attribute, val FROM cth ORDER BY 1,2',4)
      AS c(rowid text, temperature text, test_result text, test_startdate
      text, volts text);
        rowid | temperature | test_result | test_startdate | volts
      -------+-------------+-------------+----------------+--------
        test1 | 42          | PASS        | 2.6987         |
        test2 | 53          | FAIL        | 01 March 2003  | 3.1234
      (2 rows)
      
      Hashed crosstab:
      -------------------------------------------------------------------
      SELECT * FROM crosstab(
         'SELECT rowid, attribute, val FROM cth ORDER BY 1',
         'SELECT DISTINCT attribute FROM cth ORDER BY 1')
      AS c(rowid text, temperature int4, test_result text, test_startdate
      timestamp, volts float8);
        rowid | temperature | test_result |   test_startdate    | volts
      -------+-------------+-------------+---------------------+--------
        test1 |          42 | PASS        |                     | 2.6987
        test2 |          53 | FAIL        | 2003-03-01 00:00:00 | 3.1234
      (2 rows)
      
      Notice that the original crosstab slides data over to the left in the
      result tuple when it encounters missing data. In order to work around
      this you have to be make your source sql do all sorts of contortions
      (cartesian join of distinct rowid with distinct attribute; left join
      that back to the real source data). The new version avoids this by
      building a hash table using a second distinct attribute query.
      
      The new version also allows for "extra" columns (see the README) and
      allows the result columns to be coerced into differing datatypes if they
      are suitable (as shown above).
      
      In testing a "real-world" data set (69 distinct rowid's, 27 distinct
      categories/attributes, multiple missing data points) I saw about a
      5-fold improvement in execution time (from about 2200 ms old, to 440 ms
      new).
      
      I left the original version intact because: 1) BC, 2) it is probably
      slightly faster if you know that you have no missing attributes.
      
      README and regression test adjustments included. If there are no
      objections, please apply.
      
      Joe Conway
      64d0b8b0
  8. Oct 18, 2002
  9. Sep 14, 2002
    • Tom Lane's avatar
      Attached is a patch to fix some recently raised issues that exist in · bd04184b
      Tom Lane authored
      contrib/tablefunc. Specifically it replaces the use of VIEWs (for needed
      composite type creation) with use of CREATE TYPE. It also performs GRANT
      EXECUTE ON FUNCTION foo() TO PUBLIC for all of the created functions. There
      was also a cosmetic change to two regression files.
      
      Joe Conway
      bd04184b
  10. Sep 02, 2002
    • Bruce Momjian's avatar
      Attached is an update to contrib/tablefunc. It introduces a new · 6aa4482f
      Bruce Momjian authored
      function, connectby(), which can serve as a reference implementation for
      
      the changes made in the last few days -- namely the ability of a
      function to return an entire tuplestore, and the ability of a function
      to make use of the query provided "expected" tuple description.
      
      Description:
      
         connectby(text relname, text keyid_fld, text parent_keyid_fld,
           text start_with, int max_depth [, text branch_delim])
         - returns keyid, parent_keyid, level, and an optional branch string
         - requires anonymous composite type syntax in the FROM clause. See
           the instructions in the documentation below.
      
      Joe Conway
      6aa4482f
  11. Aug 15, 2002
    • Bruce Momjian's avatar
      As discussed on several occasions previously, the new anonymous · 45e25445
      Bruce Momjian authored
      composite type capability makes it possible to create a system view
      based on a table function in a way that is hopefully palatable to
      everyone. The attached patch takes advantage of this, moving
      show_all_settings() from contrib/tablefunc into the backend (renamed
      all_settings(). It is defined as a builtin returning type RECORD. During
      initdb a system view is created to expose the same information presently
      available through SHOW ALL. For example:
      
      test=# select * from pg_settings where name like '%debug%';
                name          | setting
      -----------------------+---------
        debug_assertions      | on
        debug_pretty_print    | off
        debug_print_parse     | off
        debug_print_plan      | off
        debug_print_query     | off
        debug_print_rewritten | off
        wal_debug             | 0
      (7 rows)
      
      
      Additionally during initdb two rules are created which make it possible
      to change settings by updating the system view -- a "virtual table" as
      Tom put it. Here's an example:
      
      Joe Conway
      45e25445
  12. Jul 30, 2002
    • Bruce Momjian's avatar
      As mentioned above, here is my contrib/tablefunc patch. It includes · 41f862ba
      Bruce Momjian authored
      three functions which exercise the tablefunc API.
      
      show_all_settings()
         - returns the same information as SHOW ALL, but as a query result
      
      normal_rand(int numvals, float8 mean, float8 stddev, int seed)
         - returns a set of normally distributed float8 values
         - This routine implements Algorithm P (Polar method for normal
           deviates) from Knuth's _The_Art_of_Computer_Programming_, Volume 2,
           3rd ed., pages 122-126. Knuth cites his source as "The polar
           method", G. E. P. Box, M. E. Muller, and G. Marsaglia,
           _Annals_Math,_Stat._ 29 (1958), 610-611.
      
      crosstabN(text sql)
         - returns a set of row_name plus N category value columns
         - crosstab2(), crosstab3(), and crosstab4() are defined for you,
           but you can create additional crosstab functions per directions
           in the README.
      
      Joe Conway
      41f862ba
Loading