From 5bc178b89f3ab93fb3845a941769c212f5eeaf1a Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Wed, 9 Feb 2011 11:55:32 -0500 Subject: 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. --- doc/src/sgml/extend.sgml | 12 +++ doc/src/sgml/ref/alter_extension.sgml | 194 +++++++++++++++++++++++++++++----- 2 files changed, 182 insertions(+), 24 deletions(-) (limited to 'doc/src') 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.) + + The kinds of SQL objects that can be members of an extension are shown in + the description of . 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. + + Extension Files 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 -ALTER EXTENSION name SET SCHEMA new_schema +ALTER EXTENSION extension_name SET SCHEMA new_schema +ALTER EXTENSION extension_name ADD member_object + +where member_object is: + + AGGREGATE agg_name (agg_type [, ...] ) | + CAST (source_type AS target_type) | + CONVERSION object_name | + DOMAIN object_name | + FOREIGN DATA WRAPPER object_name | + FOREIGN TABLE object_name | + FUNCTION function_name ( [ [ argmode ] [ argname ] argtype [, ...] ] ) | + OPERATOR operator_name (left_type, right_type) | + OPERATOR CLASS object_name USING index_method | + OPERATOR FAMILY object_name USING index_method | + [ PROCEDURAL ] LANGUAGE object_name | + SCHEMA object_name | + SEQUENCE object_name | + SERVER object_name | + TABLE object_name | + TEXT SEARCH CONFIGURATION object_name | + TEXT SEARCH DICTIONARY object_name | + TEXT SEARCH PARSER object_name | + TEXT SEARCH TEMPLATE object_name | + TYPE object_name | + VIEW object_name @@ -31,8 +56,8 @@ ALTER EXTENSION name SET SCHEMA Description - ALTER EXTENSION changes the definition of an existing extension. - Currently there is only one subform: + ALTER EXTENSION changes the definition of an installed + extension. There are several subforms: @@ -41,37 +66,151 @@ ALTER EXTENSION name SET SCHEMA This form moves the extension's objects into another schema. The extension has to be relocatable for this command to - succeed. See for details. + succeed. + + + + + + ADD member_object + + + 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. + + See for more information about these + operations. + + + + Only superusers can execute ALTER EXTENSION. Parameters - - - - name - - - The name of an installed extension. - - - - - - new_schema - - - The new schema for the extension. - - - - + + + + extension_name + + + The name of an installed extension. + + + + + + new_schema + + + The new schema for the extension. + + + + + + object_name + agg_name + function_name + operator_name + + + 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. + + + + + + agg_type + + + An input data type on which the aggregate function operates. + To reference a zero-argument aggregate function, write * + in place of the list of input data types. + + + + + + source_type + + + The name of the source data type of the cast. + + + + + + target_type + + + The name of the target data type of the cast. + + + + + + argmode + + + + The mode of a function argument: IN, OUT, + INOUT, or VARIADIC. + If omitted, the default is IN. + Note that ALTER EXTENSION does not actually pay + any attention to OUT arguments, since only the input + arguments are needed to determine the function's identity. + So it is sufficient to list the IN, INOUT, + and VARIADIC arguments. + + + + + + argname + + + + The name of a function argument. + Note that ALTER EXTENSION does not actually pay + any attention to argument names, since only the argument data + types are needed to determine the function's identity. + + + + + + argtype + + + + The data type(s) of the function's arguments (optionally + schema-qualified), if any. + + + + + + PROCEDURAL + + + + This is a noise word. + + + + @@ -83,6 +222,13 @@ ALTER EXTENSION name SET SCHEMA utils: ALTER EXTENSION hstore SET SCHEMA utils; + + + + + To add an existing function to the hstore extension: + +ALTER EXTENSION hstore ADD FUNCTION populate_record(anyelement, hstore); -- cgit v1.2.3