summaryrefslogtreecommitdiff
path: root/doc/src/sgml/ref/create_aggregate.sgml
diff options
context:
space:
mode:
Diffstat (limited to 'doc/src/sgml/ref/create_aggregate.sgml')
-rw-r--r--doc/src/sgml/ref/create_aggregate.sgml316
1 files changed, 0 insertions, 316 deletions
diff --git a/doc/src/sgml/ref/create_aggregate.sgml b/doc/src/sgml/ref/create_aggregate.sgml
deleted file mode 100644
index 21c547f6b67..00000000000
--- a/doc/src/sgml/ref/create_aggregate.sgml
+++ /dev/null
@@ -1,316 +0,0 @@
-<!--
-$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_aggregate.sgml,v 1.20 2002/05/18 15:44:47 petere Exp $
-PostgreSQL documentation
--->
-
-<refentry id="SQL-CREATEAGGREGATE">
- <refmeta>
- <refentrytitle id="sql-createaggregate-title">CREATE AGGREGATE</refentrytitle>
- <refmiscinfo>SQL - Language Statements</refmiscinfo>
- </refmeta>
-
- <refnamediv>
- <refname>
- CREATE AGGREGATE
- </refname>
- <refpurpose>
- define a new aggregate function
- </refpurpose>
- </refnamediv>
- <refsynopsisdiv>
- <refsynopsisdivinfo>
- <date>2000-07-16</date>
- </refsynopsisdivinfo>
- <synopsis>
-CREATE AGGREGATE <replaceable class="PARAMETER">name</replaceable> ( BASETYPE = <replaceable class="PARAMETER">input_data_type</replaceable>,
- SFUNC = <replaceable class="PARAMETER">sfunc</replaceable>, STYPE = <replaceable class="PARAMETER">state_type</replaceable>
- [ , FINALFUNC = <replaceable class="PARAMETER">ffunc</replaceable> ]
- [ , INITCOND = <replaceable class="PARAMETER">initial_condition</replaceable> ] )
- </synopsis>
-
- <refsect2 id="R2-SQL-CREATEAGGREGATE-1">
- <refsect2info>
- <date>2000-07-16</date>
- </refsect2info>
- <title>
- Inputs
- </title>
- <para>
- <variablelist>
- <varlistentry>
- <term><replaceable class="PARAMETER">name</replaceable></term>
- <listitem>
- <para>
- The name (optionally schema-qualified) of an aggregate function to
- create.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><replaceable class="PARAMETER">input_data_type</replaceable></term>
- <listitem>
- <para>
- The input data type on which this aggregate function operates.
- This can be specified as ANY for an aggregate that does not
- examine its input values
- (an example is <function>count(*)</function>).
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><replaceable class="PARAMETER">sfunc</replaceable></term>
- <listitem>
- <para>
- The name of the state transition function
- to be called for each input data value.
- This is normally a function of two arguments, the first being of
- type <replaceable class="PARAMETER">state_type</replaceable>
- and the second of
- type <replaceable class="PARAMETER">input_data_type</replaceable>.
- Alternatively, for an aggregate that does not examine its input
- values, the function takes just one argument of
- type <replaceable class="PARAMETER">state_type</replaceable>.
- In either case the function must return a value of
- type <replaceable class="PARAMETER">state_type</replaceable>.
- This function takes the current state value and the current
- input data item, and returns the next state value.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><replaceable class="PARAMETER">state_type</replaceable></term>
- <listitem>
- <para>
- The data type for the aggregate's state value.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><replaceable class="PARAMETER">ffunc</replaceable></term>
- <listitem>
- <para>
- The name of the final function called to compute the aggregate's
- result after all input data has been traversed. The function
- must take a single argument of type
- <replaceable class="PARAMETER">state_type</replaceable>.
- The output data type of the aggregate is defined as the return
- type of this function.
- If <replaceable class="PARAMETER">ffunc</replaceable>
- is not specified, then the ending state value is used as the
- aggregate's result, and the output type is
- <replaceable class="PARAMETER">state_type</replaceable>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><replaceable class="PARAMETER">initial_condition</replaceable></term>
- <listitem>
- <para>
- The initial setting for the state value. This must be a literal
- constant in the form accepted for the data type
- <replaceable class="PARAMETER">state_type</replaceable>.
- If not specified, the state value starts out NULL.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </para>
- </refsect2>
-
- <refsect2 id="R2-SQL-CREATEAGGREGATE-2">
- <refsect2info>
- <date>1998-09-09</date>
- </refsect2info>
- <title>
- Outputs
- </title>
- <para>
-
- <variablelist>
- <varlistentry>
- <term><computeroutput>
-CREATE AGGREGATE
- </computeroutput></term>
- <listitem>
- <para>
- Message returned if the command completes successfully.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </para>
- </refsect2>
- </refsynopsisdiv>
-
- <refsect1 id="R1-SQL-CREATEAGGREGATE-1">
- <refsect1info>
- <date>2000-07-16</date>
- </refsect1info>
- <title>
- Description
- </title>
- <para>
- <command>CREATE AGGREGATE</command>
- allows a user or programmer to extend <productname>PostgreSQL</productname>
- functionality by defining new aggregate functions. Some aggregate functions
- for base types such as <function>min(integer)</function>
- and <function>avg(double precision)</function> are already provided in the base
- distribution. If one defines new types or needs an aggregate function not
- already provided, then <command>CREATE AGGREGATE</command>
- can be used to provide the desired features.
- </para>
- <para>
- If a schema name is given (for example, <literal>CREATE AGGREGATE
- myschema.myagg ...</>) then the aggregate function is created in the
- specified schema. Otherwise it is created in the current schema (the one
- at the front of the search path; see <literal>CURRENT_SCHEMA()</>).
- </para>
- <para>
- An aggregate function is identified by its name and input data type.
- Two aggregates in the same schema can have the same name if they operate on
- different input types. The
- name and input data type of an aggregate must also be distinct from
- the name and input data type(s) of every ordinary function in the same
- schema.
- </para>
- <para>
- An aggregate function is made from one or two ordinary
- functions:
- a state transition function
- <replaceable class="PARAMETER">sfunc</replaceable>,
- and an optional final calculation function
- <replaceable class="PARAMETER">ffunc</replaceable>.
- These are used as follows:
- <programlisting>
-<replaceable class="PARAMETER">sfunc</replaceable>( internal-state, next-data-item ) ---> next-internal-state
-<replaceable class="PARAMETER">ffunc</replaceable>( internal-state ) ---> aggregate-value
- </programlisting>
- </para>
- <para>
- <productname>PostgreSQL</productname> creates a temporary variable
- of data type <replaceable class="PARAMETER">stype</replaceable>
- to hold the current internal state of the aggregate. At each input
- data item,
- the state transition function is invoked to calculate a new
- internal state value. After all the data has been processed,
- the final function is invoked once to calculate the aggregate's output
- value. If there is no final function then the ending state value
- is returned as-is.
- </para>
-
- <para>
- An aggregate function may provide an initial condition,
- that is, an initial value for the internal state value.
- This is specified and stored in the database as a field of type
- <type>text</type>, but it must be a valid external representation
- of a constant of the state value data type. If it is not supplied
- then the state value starts out NULL.
- </para>
-
- <para>
- If the state transition function is declared <quote>strict</quote>,
- then it cannot be called with NULL inputs. With such a transition
- function, aggregate execution behaves as follows. NULL input values
- are ignored (the function is not called and the previous state value
- is retained). If the initial state value is NULL, then the first
- non-NULL input value replaces the state value, and the transition
- function is invoked beginning with the second non-NULL input value.
- This is handy for implementing aggregates like <function>max</function>.
- Note that this behavior is only available when
- <replaceable class="PARAMETER">state_type</replaceable>
- is the same as
- <replaceable class="PARAMETER">input_data_type</replaceable>.
- When these types are different, you must supply a non-NULL initial
- condition or use a non-strict transition function.
- </para>
-
- <para>
- If the state transition function is not strict, then it will be called
- unconditionally at each input value, and must deal with NULL inputs
- and NULL transition values for itself. This allows the aggregate
- author to have full control over the aggregate's handling of NULLs.
- </para>
-
- <para>
- If the final function is declared <quote>strict</quote>, then it will not
- be called when the ending state value is NULL; instead a NULL result
- will be output automatically. (Of course this is just the normal
- behavior of strict functions.) In any case the final function has
- the option of returning NULL. For example, the final function for
- <function>avg</function> returns NULL when it sees there were zero
- input tuples.
- </para>
-
- <refsect2 id="R2-SQL-CREATEAGGREGATE-3">
- <refsect2info>
- <date>2000-07-16</date>
- </refsect2info>
- <title>
- Notes
- </title>
- <para>
- Use <command>DROP AGGREGATE</command>
- to drop aggregate functions.
- </para>
-
- <para>
- The parameters of <command>CREATE AGGREGATE</command> can be written
- in any order, not just the order illustrated above.
- </para>
-
- </refsect2>
- </refsect1>
-
- <refsect1 id="R1-SQL-CREATEAGGREGATE-2">
- <title>
- Usage
- </title>
- <para>
- Refer to the chapter on aggregate functions
- in the <citetitle>PostgreSQL Programmer's Guide</citetitle> for
- complete examples of usage.
- </para>
- </refsect1>
-
- <refsect1 id="R1-SQL-CREATEAGGREGATE-3">
- <title>
- Compatibility
- </title>
-
- <refsect2 id="R2-SQL-CREATEAGGREGATE-4">
- <refsect2info>
- <date>1998-09-09</date>
- </refsect2info>
- <title>
- SQL92
- </title>
- <para>
- <command>CREATE AGGREGATE</command>
- is a <productname>PostgreSQL</productname> language extension.
- There is no <command>CREATE AGGREGATE</command> in SQL92.
- </para>
- </refsect2>
- </refsect1>
-</refentry>
-
-<!-- Keep this comment at the end of the file
-Local variables:
-mode: sgml
-sgml-omittag:nil
-sgml-shorttag:t
-sgml-minimize-attributes:nil
-sgml-always-quote-attributes:t
-sgml-indent-step:1
-sgml-indent-data:t
-sgml-parent-document:nil
-sgml-default-dtd-file:"../reference.ced"
-sgml-exposed-tags:nil
-sgml-local-catalogs:"/usr/lib/sgml/catalog"
-sgml-local-ecat-files:nil
-End:
--->