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