diff options
author | Stephen Frost | 2014-08-21 23:06:17 +0000 |
---|---|---|
committer | Stephen Frost | 2014-08-21 23:06:17 +0000 |
commit | 3c4cf080879b386d4ed1814667aca025caafe608 (patch) | |
tree | ec530d19313baddf3ff3ee8aa693c5f4f0326b32 /doc/src | |
parent | f57791985ac3d776cb67e9d69befde538cfdf13b (diff) |
Rework 'MOVE ALL' to 'ALTER .. ALL IN TABLESPACE'
As 'ALTER TABLESPACE .. MOVE ALL' really didn't change the tablespace
but instead changed objects inside tablespaces, it made sense to
rework the syntax and supporting functions to operate under the
'ALTER (TABLE|INDEX|MATERIALIZED VIEW)' syntax and to be in
tablecmds.c.
Pointed out by Alvaro, who also suggested the new syntax.
Back-patch to 9.4.
Diffstat (limited to 'doc/src')
-rw-r--r-- | doc/src/sgml/ref/alter_index.sgml | 13 | ||||
-rw-r--r-- | doc/src/sgml/ref/alter_materialized_view.sgml | 2 | ||||
-rw-r--r-- | doc/src/sgml/ref/alter_table.sgml | 20 | ||||
-rw-r--r-- | doc/src/sgml/ref/alter_tablespace.sgml | 78 | ||||
-rw-r--r-- | doc/src/sgml/release-9.4.sgml | 5 |
5 files changed, 36 insertions, 82 deletions
diff --git a/doc/src/sgml/ref/alter_index.sgml b/doc/src/sgml/ref/alter_index.sgml index 94a7af0429c..ee3e3de4d6f 100644 --- a/doc/src/sgml/ref/alter_index.sgml +++ b/doc/src/sgml/ref/alter_index.sgml @@ -25,6 +25,8 @@ ALTER INDEX [ IF EXISTS ] <replaceable class="PARAMETER">name</replaceable> RENA ALTER INDEX [ IF EXISTS ] <replaceable class="PARAMETER">name</replaceable> SET TABLESPACE <replaceable class="PARAMETER">tablespace_name</replaceable> ALTER INDEX [ IF EXISTS ] <replaceable class="PARAMETER">name</replaceable> SET ( <replaceable class="PARAMETER">storage_parameter</replaceable> = <replaceable class="PARAMETER">value</replaceable> [, ... ] ) ALTER INDEX [ IF EXISTS ] <replaceable class="PARAMETER">name</replaceable> RESET ( <replaceable class="PARAMETER">storage_parameter</replaceable> [, ... ] ) +ALTER INDEX ALL IN TABLESPACE <replaceable class="PARAMETER">name</replaceable> [ OWNED BY <replaceable class="PARAMETER">role_name</replaceable> [, ... ] ] + SET TABLESPACE <replaceable class="PARAMETER">new_tablespace</replaceable> [ NOWAIT ] </synopsis> </refsynopsisdiv> @@ -63,6 +65,17 @@ ALTER INDEX [ IF EXISTS ] <replaceable class="PARAMETER">name</replaceable> RESE <para> This form changes the index's tablespace to the specified tablespace and moves the data file(s) associated with the index to the new tablespace. + To change the tablespace of an index, you must own the index and have + <literal>CREATE</literal> privilege on the new tablespace. + All indexes in the current database in a tablespace can be moved by using + the <literal>ALL IN TABLESPACE</literal> form, which will lock all + indexes to be moved and then move each one. This form also supports + <literal>OWNED BY</literal>, which will only move indexes owned by the + roles specified. If the <literal>NOWAIT</literal> option is specified + then the command will fail if it is unable to acquire all of the locks + required immediately. Note that system catalogs will not be moved by + this command, use <command>ALTER DATABASE</command> or explicit + <command>ALTER INDEX</command> invocations instead if desired. See also <xref linkend="SQL-CREATETABLESPACE">. </para> diff --git a/doc/src/sgml/ref/alter_materialized_view.sgml b/doc/src/sgml/ref/alter_materialized_view.sgml index 1932eeb84d4..b0759fc5dca 100644 --- a/doc/src/sgml/ref/alter_materialized_view.sgml +++ b/doc/src/sgml/ref/alter_materialized_view.sgml @@ -29,6 +29,8 @@ ALTER MATERIALIZED VIEW [ IF EXISTS ] <replaceable class="parameter">name</repla RENAME TO <replaceable class="parameter">new_name</replaceable> ALTER MATERIALIZED VIEW [ IF EXISTS ] <replaceable class="parameter">name</replaceable> SET SCHEMA <replaceable class="parameter">new_schema</replaceable> +ALTER MATERIALIZED VIEW ALL IN TABLESPACE <replaceable class="parameter">name</replaceable> [ OWNED BY <replaceable class="PARAMETER">role_name</replaceable> [, ... ] ] + SET TABLESPACE <replaceable class="PARAMETER">new_tablespace</replaceable> [ NOWAIT ] <phrase>where <replaceable class="PARAMETER">action</replaceable> is one of:</phrase> diff --git a/doc/src/sgml/ref/alter_table.sgml b/doc/src/sgml/ref/alter_table.sgml index 69a1e14bce3..0e7b99c934c 100644 --- a/doc/src/sgml/ref/alter_table.sgml +++ b/doc/src/sgml/ref/alter_table.sgml @@ -31,6 +31,8 @@ ALTER TABLE [ IF EXISTS ] <replaceable class="PARAMETER">name</replaceable> RENAME TO <replaceable class="PARAMETER">new_name</replaceable> ALTER TABLE [ IF EXISTS ] <replaceable class="PARAMETER">name</replaceable> SET SCHEMA <replaceable class="PARAMETER">new_schema</replaceable> +ALTER TABLE ALL IN TABLESPACE <replaceable class="PARAMETER">name</replaceable> [ OWNED BY <replaceable class="PARAMETER">role_name</replaceable> [, ... ] ] + SET TABLESPACE <replaceable class="PARAMETER">new_tablespace</replaceable> [ NOWAIT ] <phrase>where <replaceable class="PARAMETER">action</replaceable> is one of:</phrase> @@ -597,6 +599,17 @@ ALTER TABLE [ IF EXISTS ] <replaceable class="PARAMETER">name</replaceable> moves the data file(s) associated with the table to the new tablespace. Indexes on the table, if any, are not moved; but they can be moved separately with additional <literal>SET TABLESPACE</literal> commands. + All tables in the current database in a tablespace can be moved by using + the <literal>ALL IN TABLESPACE</literal> form, which will lock all tables + to be moved first and then move each one. This form also supports + <literal>OWNED BY</literal>, which will only move tables owned by the + roles specified. If the <literal>NOWAIT</literal> option is specified + then the command will fail if it is unable to acquire all of the locks + required immediately. Note that system catalogs are not moved by this + command, use <command>ALTER DATABASE</command> or explicit + <command>ALTER TABLE</command> invocations instead if desired. The + <literal>information_schema</literal> relations are not considered part + of the system catalogs and will be moved. See also <xref linkend="SQL-CREATETABLESPACE">. </para> @@ -649,7 +662,8 @@ ALTER TABLE [ IF EXISTS ] <replaceable class="PARAMETER">name</replaceable> </para> <para> - All the actions except <literal>RENAME</literal> and <literal>SET SCHEMA</> + All the actions except <literal>RENAME</literal>, + <literal>SET TABLESPACE</literal> and <literal>SET SCHEMA</literal> can be combined into a list of multiple alterations to apply in parallel. For example, it is possible to add several columns and/or alter the type of several @@ -659,8 +673,8 @@ ALTER TABLE [ IF EXISTS ] <replaceable class="PARAMETER">name</replaceable> <para> You must own the table to use <command>ALTER TABLE</>. - To change the schema of a table, you must also have - <literal>CREATE</literal> privilege on the new schema. + To change the schema or tablespace of a table, you must also have + <literal>CREATE</literal> privilege on the new schema or tablespace. To add the table as a new child of a parent table, you must own the parent table as well. To alter the owner, you must also be a direct or indirect member of the new diff --git a/doc/src/sgml/ref/alter_tablespace.sgml b/doc/src/sgml/ref/alter_tablespace.sgml index bd1afb4b727..7c4aabc5826 100644 --- a/doc/src/sgml/ref/alter_tablespace.sgml +++ b/doc/src/sgml/ref/alter_tablespace.sgml @@ -25,7 +25,6 @@ ALTER TABLESPACE <replaceable>name</replaceable> RENAME TO <replaceable>new_name ALTER TABLESPACE <replaceable>name</replaceable> OWNER TO <replaceable>new_owner</replaceable> ALTER TABLESPACE <replaceable>name</replaceable> SET ( <replaceable class="PARAMETER">tablespace_option</replaceable> = <replaceable class="PARAMETER">value</replaceable> [, ... ] ) ALTER TABLESPACE <replaceable>name</replaceable> RESET ( <replaceable class="PARAMETER">tablespace_option</replaceable> [, ... ] ) -ALTER TABLESPACE <replaceable>name</replaceable> MOVE { ALL | TABLES | INDEXES | MATERIALIZED VIEWS } [ OWNED BY <replaceable class="PARAMETER">role_name</replaceable> [, ...] ] TO <replaceable>new_tablespace</replaceable> [ NOWAIT ] </synopsis> </refsynopsisdiv> @@ -45,44 +44,6 @@ ALTER TABLESPACE <replaceable>name</replaceable> MOVE { ALL | TABLES | INDEXES | (Note that superusers have these privileges automatically.) </para> - <para> - <literal>ALTER TABLESPACE ... MOVE</literal> moves objects between - tablespaces. <literal>ALL</literal> will move all tables, indexes and - materialized views; specifying <literal>TABLES</literal> will move only - tables (but not their indexes), <literal>INDEXES</literal> will only move - indexes (including those underneath materialized views, but not tables), - and <literal>MATERIALIZED VIEWS</literal> will only move the table relation - of the materialized view (but no indexes associated with it). Users can - also specify a list of roles whose objects are to be moved, using - <literal>OWNED BY</literal>. - </para> - - <para> - Users must have <literal>CREATE</literal> rights on the new tablespace and - be considered an owner (either directly or indirectly) of all objects to be - moved. Note that the superuser is considered an owner of all objects, and - therefore an <literal>ALTER TABLESPACE ... MOVE ALL</literal> issued by the - superuser will move all objects in the current database that are in the - tablespace. (Attempting to move objects without the required rights will - result in an error. Non-superusers can use <literal>OWNED BY</literal> in - such cases, to restrict the set of objects moved to those with the required - rights.) - </para> - - <para> - All objects to be moved will be locked immediately by the command. If the - <literal>NOWAIT</literal> is specified, it will cause the command to fail - if it is unable to acquire the locks. - </para> - - <para> - System catalogs will not be moved by this command. To move a whole - database, use <command>ALTER DATABASE</command>, or call <command>ALTER - TABLE</command> on the individual system catalogs. Note that relations in - <literal>information_schema</literal> will be moved, just as any other - normal database objects, if the user is the superuser or considered an - owner of the relations in <literal>information_schema</literal>. - </para> </refsect1> <refsect1> @@ -136,38 +97,6 @@ ALTER TABLESPACE <replaceable>name</replaceable> MOVE { ALL | TABLES | INDEXES | </listitem> </varlistentry> - <varlistentry> - <term><replaceable class="parameter">role_name</replaceable></term> - <listitem> - <para> - Role whose objects are to be moved. - </para> - </listitem> - </varlistentry> - - <varlistentry> - <term><replaceable class="parameter">new_tablespace</replaceable></term> - <listitem> - <para> - The name of the tablespace to move objects into. The user must have - <literal>CREATE</literal> rights on the new tablespace to move objects into that - tablespace, unless the tablespace being moved into is the default - tablespace for the database connected to. - </para> - </listitem> - </varlistentry> - - <varlistentry> - <term>NOWAIT</term> - <listitem> - <para> - The <literal>NOWAIT</literal> option causes the <command>ALTER TABLESPACE</command> command to fail immediately - if it is unable to acquire the necessary lock on all of the objects being - moved. - </para> - </listitem> - </varlistentry> - </variablelist> </refsect1> @@ -186,13 +115,6 @@ ALTER TABLESPACE index_space RENAME TO fast_raid; <programlisting> ALTER TABLESPACE index_space OWNER TO mary; </programlisting></para> - - <para> - Move all of the objects from the default tablespace to - the <literal>fast_raid</literal> tablespace: -<programlisting> -ALTER TABLESPACE pg_default MOVE ALL TO fast_raid; -</programlisting></para> </refsect1> <refsect1> diff --git a/doc/src/sgml/release-9.4.sgml b/doc/src/sgml/release-9.4.sgml index e338554995d..5233ed256ae 100644 --- a/doc/src/sgml/release-9.4.sgml +++ b/doc/src/sgml/release-9.4.sgml @@ -1224,7 +1224,10 @@ <listitem> <para> Allow moving groups of objects from one tablespace to another - using <xref linkend="SQL-ALTERTABLESPACE"> ... <literal>MOVE</> + using <literal>ALL IN TABLESPACE ... SET TABLESPACE</> with + <link linkend="SQL-ALTERTABLE"><command>ALTER TABLE</></link> + <link linkend="SQL-ALTERINDEX"><command>ALTER INDEX</></link> and + <link linkend="SQL-ALTERMATERIALIZEDVIEW"><command>ALTER MATERIALIZED VIEW</></link> (Stephen Frost) </para> </listitem> |