| <!-- |
| doc/src/sgml/ref/alter_aggregate.sgml |
| PostgreSQL documentation |
| --> |
| |
| <refentry id="sql-alteraggregate"> |
| <indexterm zone="sql-alteraggregate"> |
| <primary>ALTER AGGREGATE</primary> |
| </indexterm> |
| |
| <refmeta> |
| <refentrytitle>ALTER AGGREGATE</refentrytitle> |
| <manvolnum>7</manvolnum> |
| <refmiscinfo>SQL - Language Statements</refmiscinfo> |
| </refmeta> |
| |
| <refnamediv> |
| <refname>ALTER AGGREGATE</refname> |
| <refpurpose>change the definition of an aggregate function</refpurpose> |
| </refnamediv> |
| |
| <refsynopsisdiv> |
| <synopsis> |
| ALTER AGGREGATE <replaceable>name</replaceable> ( <replaceable>aggregate_signature</replaceable> ) RENAME TO <replaceable>new_name</replaceable> |
| ALTER AGGREGATE <replaceable>name</replaceable> ( <replaceable>aggregate_signature</replaceable> ) |
| OWNER TO { <replaceable>new_owner</replaceable> | CURRENT_ROLE | CURRENT_USER | SESSION_USER } |
| ALTER AGGREGATE <replaceable>name</replaceable> ( <replaceable>aggregate_signature</replaceable> ) SET SCHEMA <replaceable>new_schema</replaceable> |
| |
| <phrase>where <replaceable>aggregate_signature</replaceable> is:</phrase> |
| |
| * | |
| [ <replaceable>argmode</replaceable> ] [ <replaceable>argname</replaceable> ] <replaceable>argtype</replaceable> [ , ... ] | |
| [ [ <replaceable>argmode</replaceable> ] [ <replaceable>argname</replaceable> ] <replaceable>argtype</replaceable> [ , ... ] ] ORDER BY [ <replaceable>argmode</replaceable> ] [ <replaceable>argname</replaceable> ] <replaceable>argtype</replaceable> [ , ... ] |
| </synopsis> |
| </refsynopsisdiv> |
| |
| <refsect1> |
| <title>Description</title> |
| |
| <para> |
| <command>ALTER AGGREGATE</command> changes the definition of an |
| aggregate function. |
| </para> |
| |
| <para> |
| You must own the aggregate function to use <command>ALTER AGGREGATE</command>. |
| To change the schema of an aggregate function, you must also have |
| <literal>CREATE</literal> privilege on the new schema. |
| To alter the owner, you must also be a direct or indirect member of the new |
| owning role, and that role must have <literal>CREATE</literal> privilege on |
| the aggregate function's schema. (These restrictions enforce that altering |
| the owner doesn't do anything you couldn't do by dropping and recreating |
| the aggregate function. However, a superuser can alter ownership of any |
| aggregate function anyway.) |
| </para> |
| </refsect1> |
| |
| <refsect1> |
| <title>Parameters</title> |
| |
| <variablelist> |
| <varlistentry> |
| <term><replaceable class="parameter">name</replaceable></term> |
| <listitem> |
| <para> |
| The name (optionally schema-qualified) of an existing aggregate function. |
| </para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><replaceable class="parameter">argmode</replaceable></term> |
| |
| <listitem> |
| <para> |
| The mode of an argument: <literal>IN</literal> or <literal>VARIADIC</literal>. |
| If omitted, the default is <literal>IN</literal>. |
| </para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><replaceable class="parameter">argname</replaceable></term> |
| |
| <listitem> |
| <para> |
| The name of an argument. |
| Note that <command>ALTER AGGREGATE</command> does not actually pay |
| any attention to argument names, since only the argument data |
| types are needed to determine the aggregate function's identity. |
| </para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><replaceable class="parameter">argtype</replaceable></term> |
| <listitem> |
| <para> |
| An input data type on which the aggregate function operates. |
| To reference a zero-argument aggregate function, write <literal>*</literal> |
| in place of the list of argument specifications. |
| To reference an ordered-set aggregate function, write |
| <literal>ORDER BY</literal> between the direct and aggregated argument |
| specifications. |
| </para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><replaceable class="parameter">new_name</replaceable></term> |
| <listitem> |
| <para> |
| The new name of the aggregate function. |
| </para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><replaceable class="parameter">new_owner</replaceable></term> |
| <listitem> |
| <para> |
| The new owner of the aggregate function. |
| </para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><replaceable class="parameter">new_schema</replaceable></term> |
| <listitem> |
| <para> |
| The new schema for the aggregate function. |
| </para> |
| </listitem> |
| </varlistentry> |
| </variablelist> |
| </refsect1> |
| |
| <refsect1> |
| <title>Notes</title> |
| |
| <para> |
| The recommended syntax for referencing an ordered-set aggregate |
| is to write <literal>ORDER BY</literal> between the direct and aggregated |
| argument specifications, in the same style as in |
| <link linkend="sql-createaggregate"><command>CREATE AGGREGATE</command></link>. However, it will also work to |
| omit <literal>ORDER BY</literal> and just run the direct and aggregated |
| argument specifications into a single list. In this abbreviated form, |
| if <literal>VARIADIC "any"</literal> was used in both the direct and |
| aggregated argument lists, write <literal>VARIADIC "any"</literal> only once. |
| </para> |
| </refsect1> |
| |
| <refsect1> |
| <title>Examples</title> |
| |
| <para> |
| To rename the aggregate function <literal>myavg</literal> for type |
| <type>integer</type> to <literal>my_average</literal>: |
| <programlisting> |
| ALTER AGGREGATE myavg(integer) RENAME TO my_average; |
| </programlisting> |
| </para> |
| |
| <para> |
| To change the owner of the aggregate function <literal>myavg</literal> for type |
| <type>integer</type> to <literal>joe</literal>: |
| <programlisting> |
| ALTER AGGREGATE myavg(integer) OWNER TO joe; |
| </programlisting> |
| </para> |
| |
| <para> |
| To move the ordered-set aggregate <literal>mypercentile</literal> with |
| direct argument of type <type>float8</type> and aggregated argument |
| of type <type>integer</type> into schema <literal>myschema</literal>: |
| <programlisting> |
| ALTER AGGREGATE mypercentile(float8 ORDER BY integer) SET SCHEMA myschema; |
| </programlisting> |
| This will work too: |
| <programlisting> |
| ALTER AGGREGATE mypercentile(float8, integer) SET SCHEMA myschema; |
| </programlisting></para> |
| </refsect1> |
| |
| <refsect1> |
| <title>Compatibility</title> |
| |
| <para> |
| There is no <command>ALTER AGGREGATE</command> statement in the SQL |
| standard. |
| </para> |
| </refsect1> |
| |
| <refsect1> |
| <title>See Also</title> |
| |
| <simplelist type="inline"> |
| <member><xref linkend="sql-createaggregate"/></member> |
| <member><xref linkend="sql-dropaggregate"/></member> |
| </simplelist> |
| </refsect1> |
| </refentry> |