aboutsummaryrefslogtreecommitdiff
path: root/doc/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2011-02-09 11:55:32 -0500
committerTom Lane <tgl@sss.pgh.pa.us>2011-02-09 11:56:37 -0500
commit5bc178b89f3ab93fb3845a941769c212f5eeaf1a (patch)
tree30f60f6497e97bf4c792bd581a3296aff5a6c5e5 /doc/src
parent70802e0dbef0af4bf73ce25489b8be6e40eca2be (diff)
downloadpostgresql-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.sgml12
-rw-r--r--doc/src/sgml/ref/alter_extension.sgml194
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">