</para>
<para>
- A second database,
- <literal>template1</literal>,<indexterm><primary>template1</primary></indexterm>
- is also created during database cluster initialization. Whenever a
+ Two additional databases,
+ <literal>template1</literal><indexterm><primary>template1</primary></indexterm>
+ and
+ <literal>template0</literal>,<indexterm><primary>template0</primary></indexterm>
+ are also created during database cluster initialization. Whenever a
new database is created within the
cluster, <literal>template1</literal> is essentially cloned.
This means that any changes you make in <literal>template1</literal> are
propagated to all subsequently created databases. Because of this,
avoid creating objects in <literal>template1</literal> unless you want them
- propagated to every newly created database. More details
+ propagated to every newly created database.
+ <literal>template0</literal> is meant as a pristine copy of the original
+ contents of <literal>template1</literal>. It can be cloned instead
+ of <literal>template1</literal> when it is important to make a database
+ without any such site-local additions. More details
appear in <xref linkend="manage-ag-templatedbs"/>.
</para>
Creating a database cluster consists of creating the directories in
which the database data will live, generating the shared catalog
tables (tables that belong to the whole cluster rather than to any
- particular database), and creating the <literal>template1</literal>
- and <literal>postgres</literal> databases. When you later create a
- new database, everything in the <literal>template1</literal> database is
- copied. (Therefore, anything installed in <literal>template1</literal>
- is automatically copied into each database created later.)
+ particular database), and creating the <literal>postgres</literal>,
+ <literal>template1</literal>, and <literal>template0</literal> databases.
The <literal>postgres</literal> database is a default database meant
for use by users, utilities and third party applications.
+ <literal>template1</literal> and <literal>template0</literal> are
+ meant as source databases to be copied by later <command>CREATE
+ DATABASE</command> commands. <literal>template0</literal> should never
+ be modified, but you can add objects to <literal>template1</literal>,
+ which by default will be copied into databases created later. See
+ <xref linkend="manage-ag-templatedbs"/> for more details.
</para>
<para>
collation order (<literal>LC_COLLATE</literal>) and character set classes
(<literal>LC_CTYPE</literal>, e.g., upper, lower, digit) can be set separately
for a database when it is created. <command>initdb</command> determines
- those settings for the <literal>template1</literal> database, which will
+ those settings for the template databases, which will
serve as the default for all other databases.
</para>
<term><option>--encoding=<replaceable class="parameter">encoding</replaceable></option></term>
<listitem>
<para>
- Selects the encoding of the template database. This will also
+ Selects the encoding of the template databases. This will also
be the default encoding of any database you create later,
- unless you override it there. The default is derived from the locale, or
+ unless you override it then. The default is derived from the locale, or
<literal>SQL_ASCII</literal> if that does not work. The character sets supported by
the <productname>PostgreSQL</productname> server are described
in <xref linkend="multibyte-charset-supported"/>.
which is meant as a default database for use by utilities, users and third
party applications. The database server itself does not require the
<literal>postgres</literal> database to exist, but many external utility
- programs assume it exists. Another database created within each cluster
- during initialization is called
- <literal>template1</literal>. As the name suggests, this will be used
- as a template for subsequently created databases; it should not be
+ programs assume it exists. There are two more databases created within
+ each cluster during initialization, named <literal>template1</literal>
+ and <literal>template0</literal>. As the names suggest, these will be
+ used as templates for subsequently-created databases; they should not be
used for actual work. (See <xref linkend="managing-databases"/> for
information about creating new databases within a cluster.)
</para>