CREATE DATABASE name [ WITH [ LOCATION = 'dbpath' ] [ TEMPLATE = template ] [ ENCODING = encoding ] ]
要创建的数据库名.
在文件系统里存储新数据库的可选位置;用字串文本声明. 或者用 DEFAULT 表示使用缺省位置.
从哪个模板创建新数据库,这是模板名.或者用 DEFAULT 使用缺省模板 (template1).
创建新数据库用的多字节编码方法.声明一个字串文本名字 (比如,'SQL_ASCII'), 或者一个整数编号,或者是 DEFAULT 表示使用缺省编码.
命令成功执行的返回信息.
你必须有特殊的 CREATEDB 权限来创建数据库。参阅 See CREATE USER。
如果声明的数据库 name 已经存在返回的信息.
数据库路径名 dbpath 不能包含单引号。这样要求是为了创建数据库目录的 shell 命令能够正确执行。
如果你有一个明确的事务块正在处理,你不能调用 CREATE DATABASE。你必须先结束事务。
这种情况最有可能是因为对数据目录权限不够, 磁盘已满或其他文件系统问题。数据库服务器运行的机器上的用户必 须能访问该路径。
CREATE DATABASE 创建一个新的 Postgres 数据库.创建者成为新数据库的管理员.
可以声明一个可选的数据库位置,例如,在另一块硬盘上存放数据库。 该路径必须是事先用 initlocation 命令准备好了的.
如果路径名不包含斜杠,那么它被解释成一个环境变量, 该变量必须为服务进程所知。这样数据库管理员 可以对能够在那里创建数据库进行控制。(例如,一个用户化的选择是 'PGDATA2'。)如果服务器带着 ALLOW_ABSOLUTE_DBPATHS (缺省时没有)选项编译, 那么也允许使用以斜杠开头为标识的绝对路径(例如, ' '/usr/local/pgsql/data')。
缺省时,新数据库将通过克隆标准系统数据库 template1 来创建.不同的模板可以用 TEMPLATE = name 来写.尤其是,如果你用 TEMPLATE = template0, 你可以创建一个很纯净的数据库,只包括你的版本的 Postgres 预定义的 标准对象.这个方法可以避免把任何本地安装的对象 (它们已经加入到 template1 里去了.) 拷贝到新数据库.
可选的编码参数允许选择数据库编码, 如果你的服务器是带着多字节编码支持编译的话. 如果没有声明,缺省是所选用的模板数据库用的编码.
可选参数可以以任意顺序写,而不仅是上面显示的顺序.
CREATE DATABASE 是 Postgres 语言的扩展.
使用 DROP DATABASE 删除一个数据库.
程序 createdb 是 是这个命令的 shell 脚本的封装,提供来方便使用。
在用绝对路径指定的可选数据库位置时, 有一些安全和数据完整性的问题, 而且缺省时只有后端识别的环境变量可以声明为可选的路径. 参考管理员手册获取更多的信息.
尽管我们可以通过把某数据库名声明为模板从非 template1 数据库 拷贝数据库,但是这(还)不是一个通用的 COPY DATABASE 功能. 特别是它的实质是拷贝操作过程中源数据库是空闲状态的 (没有数据更改事务在处理). CREATE DATABASE 会在开始操作的时候检查是否有除它之外的进程 与源数据库相连,不过这样并不能保证在拷贝数据的时候不会发生修改. 因此,我们建议当做模板使用的数据库应该以只读方式对待.
在 pg_database 里有用于每个数据库的有用的 标志:datistemplate 和 datallowconn. 可以把 datistemplate 设上表示某数据库 是用做CREATE DATABASE 的模板.如果设置了这个标志, 任何有CREATEDB权限的用户都可以克隆此数据库; 如果没有设置,那么只有超级用户和该数据库所有者可以克隆. 如果 datallowconn 为假,那么将不允许联到该 数据库的新联接(不过现存会话不会只因为设置了这个标志为假而 退出).通常 template0 数据库打上这个标记 以避免对它的修改.
创建一个新的数据库:
olly=> create database lusiadas;
在另一个地方 ~/private_db创建新数据库:
$ mkdir private_db $ initlocation ~/private_db Creating Postgres database system directory /home/olly/private_db/base $ 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