diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2011-02-09 11:55:32 -0500 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2011-02-09 11:56:37 -0500 |
commit | 5bc178b89f3ab93fb3845a941769c212f5eeaf1a (patch) | |
tree | 30f60f6497e97bf4c792bd581a3296aff5a6c5e5 /doc/src | |
parent | 70802e0dbef0af4bf73ce25489b8be6e40eca2be (diff) | |
download | postgresql-5bc178b89f3ab93fb3845a941769c212f5eeaf1a.tar.gz postgresql-5bc178b89f3ab93fb3845a941769c212f5eeaf1a.zip |
Implement "ALTER EXTENSION ADD object".
This is an essential component of making the extension feature usable;
first because it's needed in the process of converting an existing
installation containing "loose" objects of an old contrib module into
the extension-based world, and second because we'll have to use it
in pg_dump --binary-upgrade, as per recent discussion.
Loosely based on part of Dimitri Fontaine's ALTER EXTENSION UPGRADE
patch.
Diffstat (limited to 'doc/src')
-rw-r--r-- | doc/src/sgml/extend.sgml | 12 | ||||
-rw-r--r-- | doc/src/sgml/ref/alter_extension.sgml | 194 |
2 files changed, 182 insertions, 24 deletions
diff --git a/doc/src/sgml/extend.sgml b/doc/src/sgml/extend.sgml index 206eb6b9017..31ea0487f1e 100644 --- a/doc/src/sgml/extend.sgml +++ b/doc/src/sgml/extend.sgml @@ -331,6 +331,18 @@ data; see below.) </para> + <para> + The kinds of SQL objects that can be members of an extension are shown in + the description of <xref linkend="sql-alterextension">. Notably, objects + that are database-cluster-wide, such as databases, roles, and tablespaces, + cannot be extension members since an extension is only known within one + database. (Although an extension script is not prohibited from creating + such objects, if it does so they will not be tracked as part of the + extension.) Also notice that while a table can be a member of an + extension, its subsidiary objects such as indexes are not directly + considered members of the extension. + </para> + <sect2> <title>Extension Files</title> diff --git a/doc/src/sgml/ref/alter_extension.sgml b/doc/src/sgml/ref/alter_extension.sgml index 1b29d274cd6..6613418fd23 100644 --- a/doc/src/sgml/ref/alter_extension.sgml +++ b/doc/src/sgml/ref/alter_extension.sgml @@ -23,7 +23,32 @@ PostgreSQL documentation <refsynopsisdiv> <synopsis> -ALTER EXTENSION <replaceable class="PARAMETER">name</replaceable> SET SCHEMA <replaceable class="PARAMETER">new_schema</replaceable> +ALTER EXTENSION <replaceable class="PARAMETER">extension_name</replaceable> SET SCHEMA <replaceable class="PARAMETER">new_schema</replaceable> +ALTER EXTENSION <replaceable class="PARAMETER">extension_name</replaceable> ADD <replaceable class="PARAMETER">member_object</replaceable> + +<phrase>where <replaceable class="PARAMETER">member_object</replaceable> is:</phrase> + + AGGREGATE <replaceable class="PARAMETER">agg_name</replaceable> (<replaceable class="PARAMETER">agg_type</replaceable> [, ...] ) | + CAST (<replaceable>source_type</replaceable> AS <replaceable>target_type</replaceable>) | + CONVERSION <replaceable class="PARAMETER">object_name</replaceable> | + DOMAIN <replaceable class="PARAMETER">object_name</replaceable> | + FOREIGN DATA WRAPPER <replaceable class="PARAMETER">object_name</replaceable> | + FOREIGN TABLE <replaceable class="PARAMETER">object_name</replaceable> | + FUNCTION <replaceable class="PARAMETER">function_name</replaceable> ( [ [ <replaceable class="parameter">argmode</replaceable> ] [ <replaceable class="parameter">argname</replaceable> ] <replaceable class="parameter">argtype</replaceable> [, ...] ] ) | + OPERATOR <replaceable class="PARAMETER">operator_name</replaceable> (<replaceable class="PARAMETER">left_type</replaceable>, <replaceable class="PARAMETER">right_type</replaceable>) | + OPERATOR CLASS <replaceable class="PARAMETER">object_name</replaceable> USING <replaceable class="parameter">index_method</replaceable> | + OPERATOR FAMILY <replaceable class="PARAMETER">object_name</replaceable> USING <replaceable class="parameter">index_method</replaceable> | + [ PROCEDURAL ] LANGUAGE <replaceable class="PARAMETER">object_name</replaceable> | + SCHEMA <replaceable class="PARAMETER">object_name</replaceable> | + SEQUENCE <replaceable class="PARAMETER">object_name</replaceable> | + SERVER <replaceable class="PARAMETER">object_name</replaceable> | + TABLE <replaceable class="PARAMETER">object_name</replaceable> | + TEXT SEARCH CONFIGURATION <replaceable class="PARAMETER">object_name</replaceable> | + TEXT SEARCH DICTIONARY <replaceable class="PARAMETER">object_name</replaceable> | + TEXT SEARCH PARSER <replaceable class="PARAMETER">object_name</replaceable> | + TEXT SEARCH TEMPLATE <replaceable class="PARAMETER">object_name</replaceable> | + TYPE <replaceable class="PARAMETER">object_name</replaceable> | + VIEW <replaceable class="PARAMETER">object_name</replaceable> </synopsis> </refsynopsisdiv> @@ -31,8 +56,8 @@ ALTER EXTENSION <replaceable class="PARAMETER">name</replaceable> SET SCHEMA <re <title>Description</title> <para> - <command>ALTER EXTENSION</command> changes the definition of an existing extension. - Currently there is only one subform: + <command>ALTER EXTENSION</command> changes the definition of an installed + extension. There are several subforms: <variablelist> <varlistentry> @@ -41,37 +66,151 @@ ALTER EXTENSION <replaceable class="PARAMETER">name</replaceable> SET SCHEMA <re <para> This form moves the extension's objects into another schema. The extension has to be <firstterm>relocatable</> for this command to - succeed. See <xref linkend="extend-extensions"> for details. + succeed. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term><literal>ADD <replaceable class="PARAMETER">member_object</replaceable></literal></term> + <listitem> + <para> + This form adds an existing object to the extension. This is mainly + useful in extension upgrade scripts. The object will subsequently + be treated as a member of the extension; notably, it can only be + dropped by dropping the extension. </para> </listitem> </varlistentry> </variablelist> + + See <xref linkend="extend-extensions"> for more information about these + operations. + </para> + + <para> + Only superusers can execute <command>ALTER EXTENSION</command>. </para> </refsect1> <refsect1> <title>Parameters</title> - <para> - <variablelist> - <varlistentry> - <term><replaceable class="PARAMETER">name</replaceable></term> - <listitem> - <para> - The name of an installed extension. - </para> - </listitem> - </varlistentry> - - <varlistentry> - <term><replaceable class="PARAMETER">new_schema</replaceable></term> - <listitem> - <para> - The new schema for the extension. - </para> - </listitem> - </varlistentry> - </variablelist> + <para> + <variablelist> + <varlistentry> + <term><replaceable class="PARAMETER">extension_name</replaceable></term> + <listitem> + <para> + The name of an installed extension. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term><replaceable class="PARAMETER">new_schema</replaceable></term> + <listitem> + <para> + The new schema for the extension. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term><replaceable class="parameter">object_name</replaceable></term> + <term><replaceable class="parameter">agg_name</replaceable></term> + <term><replaceable class="parameter">function_name</replaceable></term> + <term><replaceable class="parameter">operator_name</replaceable></term> + <listitem> + <para> + The name of an object to be added to the extension. Names of tables, + aggregates, domains, foreign tables, functions, operators, + operator classes, operator families, sequences, text search objects, + types, and views can be schema-qualified. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term><replaceable class="parameter">agg_type</replaceable></term> + <listitem> + <para> + An input data type on which the aggregate function operates. + To reference a zero-argument aggregate function, write <literal>*</> + in place of the list of input data types. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term><replaceable>source_type</replaceable></term> + <listitem> + <para> + The name of the source data type of the cast. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term><replaceable>target_type</replaceable></term> + <listitem> + <para> + The name of the target data type of the cast. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term><replaceable class="parameter">argmode</replaceable></term> + + <listitem> + <para> + The mode of a function argument: <literal>IN</>, <literal>OUT</>, + <literal>INOUT</>, or <literal>VARIADIC</>. + If omitted, the default is <literal>IN</>. + Note that <command>ALTER EXTENSION</command> does not actually pay + any attention to <literal>OUT</> arguments, since only the input + arguments are needed to determine the function's identity. + So it is sufficient to list the <literal>IN</>, <literal>INOUT</>, + and <literal>VARIADIC</> arguments. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term><replaceable class="parameter">argname</replaceable></term> + + <listitem> + <para> + The name of a function argument. + Note that <command>ALTER EXTENSION</command> does not actually pay + any attention to argument names, since only the argument data + types are needed to determine the function's identity. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term><replaceable class="parameter">argtype</replaceable></term> + + <listitem> + <para> + The data type(s) of the function's arguments (optionally + schema-qualified), if any. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term><literal>PROCEDURAL</literal></term> + + <listitem> + <para> + This is a noise word. + </para> + </listitem> + </varlistentry> + </variablelist> </para> </refsect1> @@ -85,6 +224,13 @@ ALTER EXTENSION <replaceable class="PARAMETER">name</replaceable> SET SCHEMA <re ALTER EXTENSION hstore SET SCHEMA utils; </programlisting> </para> + + <para> + To add an existing function to the <literal>hstore</literal> extension: +<programlisting> +ALTER EXTENSION hstore ADD FUNCTION populate_record(anyelement, hstore); +</programlisting> + </para> </refsect1> <refsect1 id="SQL-ALTEREXTENSION-see-also"> |