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

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 7.3 已于 2007 年 11 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

CREATE DATABASE

CREATE DATABASE — 创建一个新数据库

大纲

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

输入

name

要创建的数据库的名称。

dbowner

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

dbpath

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

template

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

encoding

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

输出

CREATE DATABASE

命令成功完成时返回的消息。

ERROR: user 'username' is not allowed to create/drop databases

你必须拥有特殊的 CREATEDB 权限才能创建数据库。 见 CREATE USER。

ERROR: createdb: database "name" already exists

如果已经存在一个具有所指定 name 的数据库,就会出现这个错误。

ERROR: database path may not contain single quotes

数据库位置 dbpath 不能包含 单引号。这是为了确保创建数据库目录的 shell 命令能够安全执行而要求的。

ERROR: CREATE DATABASE: may not be called in a transaction block

如果有一个显式的事务块正在进行中,你就不能调用 CREATE DATABASE。必须先完成该事务。

ERROR: Unable to create database directory 'path'.
ERROR: Could not initialize database directory.

这些错误很可能与数据目录上的权限不足、磁盘已满或其他文件系统问题有关。运行 数据库服务器的用户必须能访问该位置。

描述

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

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

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

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

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

可选的编码参数允许选择数据库编码(如果你的服务器 编译时带了多字节编码支持)。未 指定时,它默认为所选模板 数据库使用的编码。

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

注意

CREATE DATABASE 是一种 PostgreSQL 语言扩展。

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

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

使用以绝对路径名指定的备选数据库位置会涉及 安全和数据完整性问题,默认情况下, 只有后端已知的环境变量才能被 指定为备选位置。 更多信息见《管理员指南》。

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

用法

创建一个新的数据库:

olly=> create database lusiadas;
   

要在备选区域 ~/private_db 中创建一个新数据库:

$ mkdir private_db
$ initlocation ~/private_db
    The location will be initialized with username "olly".
This user will own all the files and must also own the server process.
Creating directory /home/olly/private_db
Creating directory /home/olly/private_db/base

initlocation is complete.
    
   
$ psql olly
Welcome to psql, the PostgreSQL interactive terminal.
 
Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help on internal slash commands
       \g or terminate with semicolon to execute query
       \q to quit

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

兼容性

SQL92

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

提交更正

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