CREATE DATABASE

Name

CREATE DATABASE  --  创建新数据库

Synopsis

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 DATABASEPostgreSQL 语言的扩展.

使用 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 语句. 数据库等同于目录,其创建是由实现决定的.