mirror of
https://github.com/postgres/postgres.git
synced 2025-07-15 19:21:59 +03:00
Change initdb and CREATE DATABASE to actively reject attempts to create
databases with encodings that are incompatible with the server's LC_CTYPE locale, when we can determine that (which we can on most modern platforms, I believe). C/POSIX locale is compatible with all encodings, of course, so there is still some usefulness to CREATE DATABASE's ENCODING option, but this will insulate us against all sorts of recurring complaints caused by mismatched settings. I moved initdb's existing LC_CTYPE-to-encoding mapping knowledge into a new src/port/ file so it could be shared by CREATE DATABASE.
This commit is contained in:
@ -1,5 +1,5 @@
|
||||
<!--
|
||||
$PostgreSQL: pgsql/doc/src/sgml/ref/create_database.sgml,v 1.47 2007/01/31 23:26:03 momjian Exp $
|
||||
$PostgreSQL: pgsql/doc/src/sgml/ref/create_database.sgml,v 1.48 2007/09/28 22:25:49 tgl Exp $
|
||||
PostgreSQL documentation
|
||||
-->
|
||||
|
||||
@ -107,7 +107,8 @@ CREATE DATABASE <replaceable class="PARAMETER">name</replaceable>
|
||||
to use the default encoding (namely, the encoding of the
|
||||
template database). The character sets supported by the
|
||||
<productname>PostgreSQL</productname> server are described in
|
||||
<xref linkend="multibyte-charset-supported">.
|
||||
<xref linkend="multibyte-charset-supported">. See below for
|
||||
additional restrictions.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
@ -178,6 +179,21 @@ CREATE DATABASE <replaceable class="PARAMETER">name</replaceable>
|
||||
See <xref linkend="manage-ag-templatedbs"> for more information.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Any character set encoding specified for the new database must be
|
||||
compatible with the server's <envar>LC_CTYPE</> locale setting.
|
||||
If <envar>LC_CTYPE</> is <literal>C</> (or equivalently
|
||||
<literal>POSIX</>), then all encodings are allowed, but for other
|
||||
locale settings there is only one encoding that will work properly,
|
||||
and so the apparent freedom to specify an encoding is illusory if
|
||||
you didn't initialize the database cluster in <literal>C</> locale.
|
||||
<command>CREATE DATABASE</> will allow superusers to specify
|
||||
<literal>SQL_ASCII</> encoding regardless of the locale setting,
|
||||
but this choice is deprecated and may result in misbehavior of
|
||||
character-string functions if data that is not encoding-compatible
|
||||
with the locale is stored in the database.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The <literal>CONNECTION LIMIT</> option is only enforced approximately;
|
||||
if two new sessions start at about the same time when just one
|
||||
|
Reference in New Issue
Block a user