CREATE DATABASE(7)

NAME
CREATE DATABASE - 创建新数据库

SYNOPSIS

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

DESCRIPTION 描述

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

 要创建一个数据库，你必须是一个超级用户或者有特殊的 CREATEDB 权限。 参阅 CREATE USER [create_user(7)]。

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

 可以声明一个可选的数据库位置，例如，在另一块硬盘上存放数据库。 该路径必须是事先用 initlocation[initlocation(1)] 命令准备好了的。

 如果路径名不包含斜杠，那么它被解释成一个环境变量， 该变量必须为服务进程所知。这样数据库管理员 可以对能够在那里创建数据库进行控制。（例如，一个用户化的选择是 'PGDATA2'。）如果服务器带着 ALLOW_ABSOLUTE_DBPATHS （缺省时没有）选项编译， 那么也允许使用以斜杠开头为标识的绝对路径（例如， ' '/usr/local/pgsql/data'）。 In either case, the final path name must be absolute and must not contain any single quotes.

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

 可选的编码参数允许选择数据库编码， 如果没有声明，缺省是所选用的模板数据库用的编码。

PARAMETERS 参数

name
     要创建的数据库名。

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

dbpath
         在文件系统里存储新数据库的可选位置；用字串文本声明。 或者用 DEFAULT 表示使用缺省位置。

template
     从哪个模板创建新数据库，这是模板名。或者用 DEFAULT 使用缺省模板（template1）。

encoding
     创建新数据库用的多字节编码方法。声明一个字串文本名字 （比如，'SQL_ASCII'）， 或者一个整数编号，或者是 DEFAULT 表示使用缺省编码。

 可选参数可以以任意顺序写，而不仅是上面显示的顺序。

NOTES 注意

CREATE DATABASE 不能在一个事务块里面执行。 block.

 类似 "could not initialize database directory" 这样的错误最有可能是因为数据目录的权限不够， 或者磁盘满，或者其它文件系统的问题。在使用可选的位置的时候，运行数据库服务器的用户必须有访问该位置的权限。

 使用 DROP DATABASE [drop_database(7)] 删除一个数据库。

 程序 createdb[createdb(1)] 是是这个命令的封装，提供来方便使用。

 在用绝对路径指定的可选数据库位置时，有一些安全和数据完整性的问题， 这就是为什么缺省时没有打开这个特性的原因。 参考 ``Managing Databases'' 获取更多的信息。

 尽管我们可以通过把某数据库名声明为模板（而非 template1）从非template1数据库拷贝数据库， 但是这（还）不是一个通用的 "COPY DATABASE" 功能。 因此，我们建议当做模板使用的数据库都应该是以只读方式对待的。 参阅 ``Managing Databases'' 获取更多信息。

EXAMPLES 例子

 创建一个新的数据库：

CREATE DATABASE lusiadas;

 在另一个地方 ~/private_db创建新数据库， 在 shell 里执行下面的东西： shell:

mkdir private_db
initlocation ~/private_db

 然后在一个 psql 会话里执行下面的东西：

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

COMPATIBILITY 兼容性

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

译者
Postgresql 中文网站 何伟平 <laser@pgsqldb.org>