↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 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 7.4 已结束支持。 请参阅 当前版本手册.

CREATE DATABASE

CREATE DATABASE — 创建一个新数据库

大纲

CREATE DATABASE name
    [ [ WITH ] [ OWNER [=] dbowner ]
           [ LOCATION [=] 'dbpath' ]
           [ TEMPLATE [=] template ]
           [ ENCODING [=] encoding ] ]

描述

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

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

通常,创建者成为新数据库的拥有者。超级用户可以使用 OWNER 子句创建由其他用户拥有的数据库。他们甚至可以创建由没有特殊权限的用户拥有的数据库。拥有 CREATEDB 权限的非超级用户只能创建由他们自己拥有的数据库。

可以指定一个备选位置,例如,把数据库存储在另一块磁盘上。该路径必须已经用initlocation命令准备好。

如果路径名不包含斜杠,它会被解释为一个环境变量名,服务器进程必须知道这个变量。这样数据库管理员就可以控制可以在哪些位置创建数据库。(惯例的选择例如 PGDATA2。)如果服务器编译时带 ALLOW_ABSOLUTE_DBPATHS(默认不带),那么以前导斜杠标识的绝对路径名(例如 /usr/local/pgsql/data)也是允许的。无论哪种情况,最终路径名必须是绝对路径,并且不能包含单引号。

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

可选的编码参数允许选择数据库编码。未指定时,它默认为所选模板数据库使用的编码。

参数

name

要创建的数据库的名称。

dbowner

将拥有新数据库的数据库用户的名称,或者 DEFAULT 表示使用默认值(即执行该命令的用户)。

dbpath

存储新数据库的备选文件系统位置,以字符串字面量的形式指定;或者 DEFAULT 表示使用默认位置。

template

创建新数据库所用模板的名称,或者 DEFAULT 表示使用默认模板(template1)。

encoding

在新数据库中使用的字符集编码。指定一个字符串常量(例如 'SQL_ASCII')、一个整数编码号,或者 DEFAULT 表示使用默认编码。

可选参数可以按任意顺序书写,而不只是按上面展示的顺序。

注意

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

类似 “could not initialize database directory”(无法初始化数据库目录)这样的错误最有可能与数据目录上的权限不足、磁盘已满或其他文件系统问题有关。使用备选位置时,运行数据库服务器的用户必须能访问该位置。

使用DROP DATABASE删除一个数据库。

程序createdb是围绕这个命令的包装程序,为方便起见提供。

使用以绝对路径名指定的备选数据库位置会涉及安全问题;这就是该特性默认未启用的原因。见第 18.5 节了解更多信息。

虽然可以通过把某个数据库的名字指定为模板来复制 template1 以外的数据库,但这(目前)并不是要作为一种通用的 “COPY DATABASE” 设施。我们建议把用作模板的数据库当作只读的。见第 18.3 节了解更多信息。

示例

创建一个新的数据库:

CREATE DATABASE lusiadas;

要在备选区域 ~/private_db 中创建一个新数据库,从 shell 执行下列命令:

mkdir private_db
initlocation ~/private_db

然后在 psql 会话中执行下列命令:

CREATE DATABASE elsewhere WITH LOCATION '/home/olly/private_db';

兼容性

SQL 标准中没有 CREATE DATABASE 语句。数据库等价于目录,其创建是实现定义的。

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.