]> granicus.if.org Git - postgresql/blobdiff - doc/src/sgml/ref/alter_database.sgml
Allow CREATE/ALTER DATABASE to manipulate datistemplate and datallowconn.
[postgresql] / doc / src / sgml / ref / alter_database.sgml
index 76a4ac014afc40d70ebb30b540872927a1539a36..3724c05e2c0cfd6c1128094d9545747f8a75970c 100644 (file)
@@ -1,11 +1,16 @@
 <!--
-$Header: /cvsroot/pgsql/doc/src/sgml/ref/alter_database.sgml,v 1.3 2002/05/17 01:19:16 tgl Exp $
+doc/src/sgml/ref/alter_database.sgml
 PostgreSQL documentation
 -->
 
 <refentry id="SQL-ALTERDATABASE">
+ <indexterm zone="sql-alterdatabase">
+  <primary>ALTER DATABASE</primary>
+ </indexterm>
+
  <refmeta>
-  <refentrytitle id="sql-alterdatabase-title">ALTER DATABASE</refentrytitle>
+  <refentrytitle>ALTER DATABASE</refentrytitle>
+  <manvolnum>7</manvolnum>
   <refmiscinfo>SQL - Language Statements</refmiscinfo>
  </refmeta>
 
@@ -16,8 +21,24 @@ PostgreSQL documentation
 
  <refsynopsisdiv>
 <synopsis>
-ALTER DATABASE <replaceable class="PARAMETER">name</replaceable> SET <replaceable>variable</replaceable> { TO | = } { <replaceable>value</replaceable> | DEFAULT }
-ALTER DATABASE <replaceable class="PARAMETER">name</replaceable> RESET <replaceable>variable</replaceable>
+ALTER DATABASE <replaceable class="PARAMETER">name</replaceable> [ [ WITH ] <replaceable class="PARAMETER">option</replaceable> [ ... ] ]
+
+<phrase>where <replaceable class="PARAMETER">option</replaceable> can be:</phrase>
+
+    IS_TEMPLATE <replaceable class="PARAMETER">istemplate</replaceable>
+    ALLOW_CONNECTIONS <replaceable class="PARAMETER">allowconn</replaceable>
+    CONNECTION LIMIT <replaceable class="PARAMETER">connlimit</replaceable>
+
+ALTER DATABASE <replaceable class="PARAMETER">name</replaceable> RENAME TO <replaceable>new_name</replaceable>
+
+ALTER DATABASE <replaceable class="PARAMETER">name</replaceable> OWNER TO <replaceable>new_owner</replaceable>
+
+ALTER DATABASE <replaceable class="PARAMETER">name</replaceable> SET TABLESPACE <replaceable class="PARAMETER">new_tablespace</replaceable>
+
+ALTER DATABASE <replaceable class="PARAMETER">name</replaceable> SET <replaceable>configuration_parameter</replaceable> { TO | = } { <replaceable>value</replaceable> | DEFAULT }
+ALTER DATABASE <replaceable class="PARAMETER">name</replaceable> SET <replaceable>configuration_parameter</replaceable> FROM CURRENT
+ALTER DATABASE <replaceable class="PARAMETER">name</replaceable> RESET <replaceable>configuration_parameter</replaceable>
+ALTER DATABASE <replaceable class="PARAMETER">name</replaceable> RESET ALL
 </synopsis>
  </refsynopsisdiv>
 
@@ -25,96 +46,159 @@ ALTER DATABASE <replaceable class="PARAMETER">name</replaceable> RESET <replacea
   <title>Description</title>
 
   <para>
-   <command>ALTER DATABASE</command> is used to change the session
-   default of a run-time configuration variable for a
-   <productname>PostgreSQL</productname> database. Whenever a new
-   session is subsequently started in that database, the specified
-   value becomes the session default value.
-   The database-specific default
-   overrides whatever setting is present in <filename>postgresql.conf</>
-   or has been received from the postmaster.
+   <command>ALTER DATABASE</command> changes the attributes
+   of a database.
+  </para>
+
+  <para>
+   The first form changes certain per-database settings.  (See below for
+   details.)  Only the database owner or a superuser can change these settings.
   </para>
 
   <para>
-   Only a superuser or the database owner can change the session defaults for a
-   database.
+   The second form changes the name of the database.  Only the database
+   owner or a superuser can rename a database; non-superuser owners must
+   also have the
+   <literal>CREATEDB</literal> privilege.  The current database cannot
+   be renamed.  (Connect to a different database if you need to do
+   that.)
   </para>
 
-  <refsect2>
-   <title>Parameters</title>
+  <para>
+   The third form changes the owner of the database.
+   To alter the owner, you must own the database and also be a direct or
+   indirect member of the new owning role, and you must have the
+   <literal>CREATEDB</literal> privilege.
+   (Note that superusers have all these privileges automatically.)
+  </para>
+
+  <para>
+   The fourth form changes the default tablespace of the database.
+   Only the database owner or a superuser can do this; you must also have
+   create privilege for the new tablespace.
+   This command physically moves any tables or indexes in the database's old
+   default tablespace to the new tablespace.  Note that tables and indexes
+   in non-default tablespaces are not affected.
+  </para>
+
+  <para>
+   The remaining forms change the session default for a run-time
+   configuration variable for a <productname>PostgreSQL</productname>
+   database. Whenever a new session is subsequently started in that
+   database, the specified value becomes the session default value.
+   The database-specific default overrides whatever setting is present
+   in <filename>postgresql.conf</> or has been received from the
+   <command>postgres</command> command line.  Only the database
+   owner or a superuser can change the session defaults for a
+   database.  Certain variables cannot be set this way, or can only be
+   set by a superuser.
+  </para>
+ </refsect1>
+
+ <refsect1>
+  <title>Parameters</title>
 
-   <para>
     <variablelist>
      <varlistentry>
       <term><replaceable class="PARAMETER">name</replaceable></term>
       <listitem>
        <para>
-       The name of the database whose session defaults are to be altered.
+        The name of the database whose attributes are to be altered.
+       </para>
+      </listitem>
+     </varlistentry>
+
+     <varlistentry>
+       <term><replaceable class="parameter">istemplate</replaceable></term>
+       <listitem>
+        <para>
+         If true, then this database can be cloned by any user with CREATEDB
+         privileges; if false, then only superusers or the owner of the
+         database can clone it.
+        </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><replaceable class="parameter">allowconn</replaceable></term>
+       <listitem>
+        <para>
+         If false then no one can connect to this database.
+        </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+      <term><replaceable class="parameter">connlimit</replaceable></term>
+      <listitem>
+       <para>
+        How many concurrent connections can be made
+        to this database.  -1 means no limit.
        </para>
       </listitem>
      </varlistentry>
 
+   <varlistentry>
+    <term><replaceable>new_name</replaceable></term>
+    <listitem>
+     <para>
+      The new name of the database.
+     </para>
+    </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term><replaceable class="parameter">new_owner</replaceable></term>
+    <listitem>
+     <para>
+      The new owner of the database.
+     </para>
+    </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term><replaceable class="parameter">new_tablespace</replaceable></term>
+    <listitem>
+     <para>
+      The new default tablespace of the database.
+     </para>
+    </listitem>
+   </varlistentry>
+
      <varlistentry>
-      <term><replaceable>variable</replaceable></term>
+      <term><replaceable>configuration_parameter</replaceable></term>
       <term><replaceable>value</replaceable></term>
       <listitem>
        <para>
-        Set the session default for this database of the specified
-        configuration variable to the given value.  If
+        Set this database's session default for the specified configuration
+        parameter to the given value.  If
         <replaceable>value</replaceable> is <literal>DEFAULT</literal>
         or, equivalently, <literal>RESET</literal> is used, the
-        database-specific variable setting is removed and the system-wide
-       default
+        database-specific setting is removed, so the system-wide default
         setting will be inherited in new sessions.  Use <literal>RESET
-        ALL</literal> to clear all settings.
+        ALL</literal> to clear all database-specific settings.
+        <literal>SET FROM CURRENT</> saves the session's current value of
+        the parameter as the database-specific value.
        </para>
 
        <para>
-        See <xref linkend="sql-set" endterm="sql-set-title"> and the
-        <citetitle>Administrator's Guide</citetitle> for more
-        information about allowed variable names and values.
+        See <xref linkend="sql-set"> and <xref linkend="runtime-config">
+        for more information about allowed parameter names
+        and values.
        </para>
       </listitem>
      </varlistentry>
-    </variablelist>
-   </para>
-  </refsect2>
- </refsect1>
-
- <refsect1>
-  <title>Diagnostics</title>
-
-  <para>
-   <variablelist>
-    <varlistentry>
-     <term><computeroutput>ALTER DATABASE</computeroutput></term>
-     <listitem>
-      <para>
-       Message returned if the alteration was successful.
-      </para>
-     </listitem>
-    </varlistentry>
-     
-    <varlistentry>
-     <term><computeroutput>ERROR:  database "dbname" does not exist</computeroutput></term>
-     <listitem>
-      <para>
-       Error message returned if the specified database is not known
-       to the system.
-      </para>
-     </listitem>
-    </varlistentry>
-   </variablelist>
-  </para>
+  </variablelist>
  </refsect1>
 
  <refsect1>
   <title>Notes</title>
 
   <para>
-   Using <xref linkend="sql-alteruser" endterm="sql-alteruser-title">,
-   it is also possible to tie a session default to a specific user
-   rather than a database.  User-specific settings override database-specific
+   It is also possible to tie a session default to a specific role
+   rather than to a database; see
+   <xref linkend="sql-alterrole">.
+   Role-specific settings override database-specific
    ones if there is a conflict.
   </para>
  </refsect1>
@@ -128,13 +212,12 @@ ALTER DATABASE <replaceable class="PARAMETER">name</replaceable> RESET <replacea
 
 <programlisting>
 ALTER DATABASE test SET enable_indexscan TO off;
-</programlisting>
-  </para>
+</programlisting></para>
  </refsect1>
 
  <refsect1>
   <title>Compatibility</title>
-    
+
   <para>
    The <command>ALTER DATABASE</command> statement is a
    <productname>PostgreSQL</productname> extension.
@@ -145,27 +228,10 @@ ALTER DATABASE test SET enable_indexscan TO off;
   <title>See Also</title>
 
   <simplelist type="inline">
-   <member><xref linkend="sql-alteruser" endterm="sql-alteruser-title"></member>
-   <member><xref linkend="sql-createdatabase" endterm="sql-createdatabase-title"></member>
-   <member><xref linkend="sql-dropdatabase" endterm="sql-dropdatabase-title"></member>
-   <member><xref linkend="sql-set" endterm="sql-set-title"></member>
+   <member><xref linkend="sql-createdatabase"></member>
+   <member><xref linkend="sql-dropdatabase"></member>
+   <member><xref linkend="sql-set"></member>
+   <member><xref linkend="sql-createtablespace"></member>
   </simplelist>
  </refsect1>
 </refentry>
-
-<!-- Keep this comment at the end of the file
-Local variables:
-mode: sgml
-sgml-omittag:nil
-sgml-shorttag:t
-sgml-minimize-attributes:nil
-sgml-always-quote-attributes:t
-sgml-indent-step:1
-sgml-indent-data:t
-sgml-parent-document:nil
-sgml-default-dtd-file:"../reference.ced"
-sgml-exposed-tags:nil
-sgml-local-catalogs:"/usr/lib/sgml/catalog"
-sgml-local-ecat-files:nil
-End:
--->