PostgreSQL 8.2.3 中文文档
后退快退快进前进

CREATE DATABASE

名称

CREATE DATABASE -- 创建一个新数据库

语法

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

描述

CREATE DATABASE 创建一个新数据库。

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

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

缺省时,新数据库将通过克隆标准系统数据库 template1 来创建。可以通过 TEMPLATE name 指定不同的模板。尤其是,用 TEMPLATE template0 创建一个很纯净的、只包括 PostgreSQL 预定义的标准对象的数据库。这个方法可以避免把任何已经加入到 template1 里的本地安装对象拷贝到新数据库。

参数

name

要创建的数据库名字

dbowner

数据库用户的名字,他将拥有新数据库,或者是写 DEFAULT 使用缺省用户(也就是执行命令的用户)。

template

模板名(从哪个模板创建新数据库),或者用 DEFAULT 使用缺省模板(template1)。

encoding

创建新数据库使用的字符编码。可以使用文本名字(例如 'SQL_ASCII')、整数编号、DEFAULT(模版数据库的编码)。PostgreSQL 服务器支持的字符集在节21.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 完成之后才允许建立新的会话连接。参见节19.3获取更多信息。

CONNECTION LIMIT 选项只是近似地强制;如果两个新的连接几乎同时发起,而只剩下一个连接"槽位"了,那么很可能两个连接都失效。同样,这个限制并不强加在超级用户上。

例子

创建一个新数据库:

CREATE DATABASE lusiadas;

创建一个由用户 salesapp 拥有的数据库 sales ,缺省表空间是 salesspace

CREATE DATABASE sales OWNER salesapp TABLESPACE salesspace;

创建一个数据库 music ,支持 ISO-8859-1 字符集:

CREATE DATABASE music ENCODING 'LATIN1';

兼容性

在 SQL 标准里没有 CREATE DATABASE 语句。数据库等同于目录,其创建是由实现决定的。

又见

ALTER DATABASE, DROP DATABASE

后退首页前进
CREATE CONVERSION上一级CREATE DOMAIN