Postgresql 中文操作指南
Synopsis
CREATE DATABASE name
[ WITH ] [ OWNER [=] user_name ]
[ TEMPLATE [=] template ]
[ ENCODING [=] encoding ]
[ STRATEGY [=] strategy ]
[ LOCALE [=] locale ]
[ LC_COLLATE [=] lc_collate ]
[ LC_CTYPE [=] lc_ctype ]
[ ICU_LOCALE [=] icu_locale ]
[ ICU_RULES [=] icu_rules ]
[ LOCALE_PROVIDER [=] locale_provider ]
[ COLLATION_VERSION = collation_version ]
[ TABLESPACE [=] tablespace_name ]
[ ALLOW_CONNECTIONS [=] allowconn ]
[ CONNECTION LIMIT [=] connlimit ]
[ IS_TEMPLATE [=] istemplate ]
[ OID [=] oid ]
Description
CREATE DATABASE 创建新的 PostgreSQL 数据库。
要创建数据库,您必须是超级用户或拥有特殊的 CREATEDB 权限。参见 CREATE ROLE 。
默认情况下,将通过克隆标准系统数据库 template1 来创建新数据库。可以通过写 TEMPLATE _name_ 来指定不同的模板。特别地,通过写 TEMPLATE template0 ,您可以创建原始数据库(其中不存在用户定义的对象,系统对象也未被更改),它仅包含 PostgreSQL 版本预定义的标准对象。如果您希望避免复制可能添加到 template1 的任何安装本地对象,这将非常有用。
Parameters
-
name #
-
要创建的数据库的名称。
-
-
user_name #
-
将拥有新数据库的用户角色名称,或 DEFAULT ,以使用默认值(即,执行该命令的用户)。要创建属于另一个角色的数据库,您必须能够 SET ROLE 该角色。
-
-
template #
-
要从中创建新数据库的模板名称,或 DEFAULT ,以使用默认模板 ( template1 )。
-
-
encoding #
-
在新数据库中使用的字符集编码。指定字符串常量(例如, 'SQL_ASCII' ),或整数编码号,或 DEFAULT ,以使用默认编码(即,模板数据库的编码)。PostgreSQL 服务器支持的字符集在 Section 24.3.1 中进行了描述。有关其他限制,请参见下文。
-
-
strategy #
-
创建新数据库时要使用的策略。如果使用 WAL_LOG 策略,将按块复制数据库,并且每个块将被单独写入预写式日志。在模板数据库较小的情况下,这是效率最高的策略,因此是默认策略。也提供了较旧的 FILE_COPY 策略。此策略为目标数据库使用的每个表空间在预写式日志中写入一条较小的记录。尽管这确实大大减少了预写式日志的容量,特别是在模板数据库较大时,但这也强迫系统在新数据库创建之前和之后执行检查点。在某些情况下,这可能会对整体系统性能产生明显的负面影响。
-
-
locale #
-
设置新数据库中的默认整理顺序和字符分类。整理顺序会影响应用于字符串的排序顺序,例如使用 ORDER BY 的查询,以及在文本列上的索引中使用的顺序。字符分类影响字符的分类,例如,小写、大写和数字。同时设置操作系统环境 LC_COLLATE 和 LC_CTYPE 的相关方面。默认值与模板数据库的设置相同。有关详细信息,请参见 Section 24.2.2.3.1 和 Section 24.2.2.3.2 。
-
可以通过分别设置 lc_collate , lc_ctype 或 icu_locale 来覆盖。
-
-
lc_collate #
-
设置数据库服务器操作系统环境中的 LC_COLLATE 。如果指定了 locale ,则默认值是 locale 的设置,否则与模板数据库的设置相同。有关其他限制,请参见下文。
-
如果 locale_provider 是 libc ,还将设置在新的数据库中使用的默认排序顺序,覆盖设置 locale 。
-
-
lc_ctype #
-
在数据库服务器的操作系统环境中设置 LC_CTYPE 。如果指定,则默认是 locale 的设置,否则是模板数据库的设置。请参见以下有关其他限制的说明。
-
如果 locale_provider 是 libc ,还将设置在新的数据库中使用的默认字符分类,覆盖设置 locale 。
-
-
icu_locale #
-
指定 ICU 语言环境(请参见 Section 24.2.2.3.2 )用于数据库默认排序顺序和字符分类,覆盖设置 locale 。 locale provider 必须是 ICU。如果指定,则默认是 locale 的设置;否则是模板数据库的设置。
-
-
icu_rules #
-
指定其他排序规则来自定义此数据库的默认排序的行为。这仅对 ICU 受支持。有关详细信息,请参见 Section 24.2.3.4 。
-
-
locale_provider #
-
指定用于此数据库中的默认排序的提供程序。可能的值是 icu (如果服务器是用 ICU 支持构建的)或 libc 。默认情况下,提供程序与 template 相同。有关详细信息,请参见 Section 24.1.4 。
-
-
collation_version #
-
指定要与数据库一起存储的排序版本字符串。通常,此项应是省略的,这将导致版本从操作提供的数据库排序的实际版本计算而来。此选项旨在供 pg_upgrade 在现有安装中复制版本时使用。
-
有关如何处理数据库排序版本不匹配,请参见 ALTER DATABASE 。
-
-
tablespace_name #
-
将与新数据库关联的表空间的名称,或 DEFAULT 用于使用模板数据库的表空间。此表空间将是用于在此数据库中创建的对象的默认表空间。有关更多信息,请参见 CREATE TABLESPACE 。
-
-
allowconn #
-
如果为 False,则没有人可以连接到此数据库。默认值为 True,允许连接(但受其他机制限制,例如 GRANT / REVOKE CONNECT )。
-
-
connlimit #
-
可以与此数据库建立多少个并发连接。-1(默认值)表示无限制。
-
-
istemplate #
-
如果为 True,则任何具有 CREATEDB 权限的用户都可以克隆此数据库;如果为 False(默认值),则只有超级用户或数据库所有者可以克隆它。
-
-
oid #
-
要用于新数据库的对象标识符。如果未指定此参数,PostgreSQL 将自动选择一个合适的 OID。此参数主要供 pg_upgrade 内部使用,并且只有 pg_upgrade 可以指定小于 16384 的值。
-
Tip
其他语言环境设置 lc_messages 、 lc_monetary 、 lc_numeric 和 lc_time 不会因数据库而变动,并且不会由此命令设置。如果你想使其成为特定数据库的默认设置,则可以使用 ALTER DATABASE … SET 。
可选参数可以按任何顺序编写,而不仅仅是上述说明中的顺序。
Notes
不能在事务块中执行 CREATE DATABASE 。
“无法初始化数据库目录”之类的错误最可能与数据目录上的权限不足、磁盘已满或其他文件系统问题有关。
使用 DROP DATABASE 删除数据库。
程序 createdb 是此命令的包装程序,为方便起见而提供。
数据库级别配置参数(通过 ALTER DATABASE 设置)和数据库级别权限(通过 GRANT 设置)不会从模板数据库中复制。
虽然可以通过将数据库名称指定为模板来复制 template1 之外的其他数据库,但此举(目前)不打算作为通用“ COPY DATABASE ”设施。主要限制在于在复制模板数据库时,没有其他会话可以连接到该数据库。如果在启动 CREATE DATABASE 时有任何其他连接,它将失败;否则,在 CREATE DATABASE 完成之前,不会建立新的连接到该模板数据库。请参阅 Section 23.3 了解详情。
为新数据库指定的字符集编码必须与所选择的语言环境设置( LC_COLLATE 和 LC_CTYPE )兼容。如果语言环境是 C (或同等的 POSIX ),则允许所有编码,但是对于其他语言环境设置,只有一项编码能够正常工作。(但是,在 Windows 上,UTF-8 编码可用于任何语言环境。) CREATE DATABASE 允许超级用户指定 SQL_ASCII 编码,而不考虑语言环境设置,但此选择已弃用,如果在数据库中存储与语言环境不兼容的编码数据,则可能会导致字符字符串函数出现错误。
编码和语言环境设置必须与模板数据库的设置相匹配,但将 template0 用作模板除外。这是因为其他数据库可能包含与指定编码不匹配的数据,或可能包含排序顺序受 LC_COLLATE 和 LC_CTYPE 影响的索引。复制此类数据将导致数据库根据新设置损坏。然而,众所周知, template0 不包含任何数据或索引,而这些数据或索引会受到影响。
目前,没有使用具有非确定性比较的数据库语言环境的选项(参阅 CREATE COLLATION 了解解释)。如果有此需要,则需要使用基于列的整理规则。
CONNECTION LIMIT 选项只近似强制执行;如果两个新会话在数据库只剩下一个连接“插槽”的时候同时启动,则两者都可能失败。此外,限制不会对超级用户或后台工作进程强制执行。
Examples
创建新数据库:
CREATE DATABASE lusiadas;
要创建由用户 salesapp 拥有的数据库 sales ,其默认表空间为 salesspace :
CREATE DATABASE sales OWNER salesapp TABLESPACE salesspace;
要创建具有不同语言环境的数据库 music :
CREATE DATABASE music
LOCALE 'sv_SE.utf8'
TEMPLATE template0;
在此示例中,如果指定的语言环境不同于 template1 中的语言环境,则 TEMPLATE template0 从句必需。(如果不同,则显式指定语言环境是多余的。)
要创建具有不同语言环境和不同字符集编码的数据库 music2 :
CREATE DATABASE music2
LOCALE 'sv_SE.iso885915'
ENCODING LATIN9
TEMPLATE template0;
指定的语言环境和编码设置必须匹配,否则将报告错误。
请注意,语言环境名称特定于操作系统,因此以上命令可能无法在所有地方以相同方式运行。