每个正在运行的PostgreSQL服务器实例都管理着一个或多个数据库。 因此,在组织SQL("数据库对象")对象的层次中,数据库位于最顶层。 本章描述数据库的属性,以及如何创建,管理,和删除它们。
数据库是一些SQL对象("数据库对象")的命名集合; 通常每个数据库对象(表,函数等等)属于并且只属于一个数据库。 (不过有几个系统表,比如 pg_database,属于整个集群并且可以在集群之内的每个数据库里访问。) 更准确地说,一个数据库是一个模式的集合,而模式包含表,函数等等。 因此完整的层次是这样的:服务器,数据库,模式,表(或者其他类型对象,比如函数)。
在与数据库服务器联接的时候,应用应该在它的联接请求里面带有它想与之联接的数据库名称。 不允许在一次联接里面对多个数据库访问.(不过没有限制一个应用与同一个或者其他数据库可以建立的联接数量.) 数据库是物理上相互隔离的, 对它们的访问控制是在联接层次进行控制的。如果一个PostgreSQL 服务器实例用于承载那些应该分隔并且相互之间并不知晓的用户和项目, 那么我们建议把它们放在不同的数据库里。如果项目或者用户是相互关联的, 并且可以相互使用对方的资源,那么应该把它们放在同一个数据库里, 但可能是不同的模式里。模式只是一个纯粹的逻辑结构,谁能访问某个模式由权限系统控制。 有关管理模式的更多信息在 Section 5.7 里。
数据库是使用 CREATE DATABASE 命令创建的(参阅 Section 19.2), 用 DROP DATABASE 命令删除(参阅 Section 19.5)。 要判断现有数据库的集合,检查系统表 pg_database,比如
SELECT datname FROM pg_database;
psql 程序的 \l 元命令和 -l 命令行选项也可以用来列出现存数据库。
注意: SQL 标准把数据库称作"目录(catalog)",不过这两个东西实际上没有什么区别。