↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1 / 7.0 / 6.5 / 6.4
历史版本PostgreSQL 8.3 已于 2013 年 2 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

CREATE DATABASE

CREATE DATABASE — 创建一个新数据库

大纲

CREATE DATABASE name
    [ [ WITH ] [ OWNER [=] dbowner ]
           [ TEMPLATE [=] template ]
           [ ENCODING [=] encoding ]
           [ TABLESPACE [=] tablespace ]
           [ CONNECTION LIMIT [=] connlimit ] ]

描述

CREATE DATABASE 创建一个新的 PostgreSQL 数据库。

要创建数据库,你必须是超级用户,或者拥有特殊的 CREATEDB 权限。见 CREATE USER。

默认情况下,新数据库通过克隆标准系统数据库 template1 来创建。可以通过写成 TEMPLATE name 指定其他模板。特别是, 写成 TEMPLATE template0 时,可以创建一个全新的数据库, 它只包含你的 PostgreSQL 版本预定义的标准对象。 如果你希望避免复制任何可能已添加到 template1 中的站点本地附加对象, 这会很有用。

参数

name

要创建的数据库名称。

dbowner

新数据库所有者的角色名称,或使用 DEFAULT 以使用默认值(即执行命令的用户)。要创建由其他角色拥有的数据库,你必须是该角色的直接或间接成员,或为超级用户。

template

用于创建新数据库的模板名称,或者指定 DEFAULT 以使用默认模板(template1)。

encoding

新数据库要使用的字符集编码。可指定字符串常量(例如 'SQL_ASCII')、整数编码编号,或者指定 DEFAULT 以使用默认编码(即模板数据库的编码)。 PostgreSQL 服务器支持的字符集见 第 22.2.1 节。其他限制见下文。

tablespace

将与新数据库关联的表空间名称,或者指定 DEFAULT 以使用模板数据库的表空间。该表空间将成为在此数据库中创建对象时使用的默认表空间。详见 CREATE TABLESPACE。

connlimit

可对该数据库建立的并发连接数。-1(默认值)表示不受限制。

可选参数可以按任意顺序书写,不一定要按照上面的顺序。

注解

CREATE DATABASE 不能在事务块内执行。

形如 “could not initialize database directory” 的错误, 多半与数据目录权限不足、磁盘已满或其他文件系统问题有关。

使用 DROP DATABASE 删除数据库。

程序 createdb 是这个命令的一个包装器程序,为方便使用而提供。

尽管可以通过把某个数据库名指定为模板,从而复制它而不是复制 template1,但这(至少目前)并不打算作为一种通用的 “COPY DATABASE” 功能。主要限制是,在复制模板数据库期间,不能有任何其他会话连接到该数据库。 CREATE DATABASE 在启动时如果发现存在任何其他连接,就会失败;否则,在 CREATE DATABASE 完成之前,将阻止对模板数据库建立新的连接。详见 第 20.3 节。

为新数据库指定的任何字符集编码都必须与服务器的LC_CTYPE区域设置兼容。 如果LC_CTYPE是C(或等价的 POSIX),则允许所有编码;但对于其他区域设置,只有一种编码能够正常工作, 因此,如果你没有在C区域下初始化数据库集簇,表面上可以自由指定编码其实是一种假象。 CREATE DATABASE 允许超级用户不考虑区域设置而指定 SQL_ASCII 编码,但这种选择已弃用;如果数据库中存储了与该区域设置不兼容编码的数据,字符串函数的行为可能会出错。

CONNECTION LIMIT 选项只是近似地被强制执行;如果两个新会话几乎同时启动,而该数据库只剩下一个连接“槽”,则两者都可能失败。此外,该限制对超级用户无效。

示例

要创建一个新数据库:

CREATE DATABASE lusiadas;

要创建一个由用户 salesapp 拥有、默认表空间为 salesspace 的数据库 sales:

CREATE DATABASE sales OWNER salesapp TABLESPACE salesspace;

要创建支持 ISO-8859-1 字符集的数据库music:

CREATE DATABASE music ENCODING 'LATIN1';

兼容性

SQL 标准中没有 CREATE DATABASE 语句。数据库相当于目录,而目录的创建由实现定义。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。