一个数据库是一些SQL对象(“数据库对象”)的命名集合。通常每个数据库对象(表、函数等) 属于并且只属于一个数据库(不过有几个系统表如pg_database
属于整个集簇并且对集簇中的每个数据库都是可访问的)。更准确地说,一个数据库是一个模式的集合, 而模式包含表、函数等等。因此完整的层次是这样的:服务器、数据库、模式、表(或者某些其他对象类型,如函数)。
当连接到数据库服务器时,客户端必须在它的连接请求中指定它要连接的数据库名。每次连接不能访问超过一个数据库。不过,一个应用能够在同一个或者其他数据库上打开的连接数并没有受到限制。数据库是物理上相互隔离的,并且访问控制是在连接层面进行管理的。 如果一个PostgreSQL服务器实例用于承载那些应该分隔并且相互之间并不知晓的用户 和项目,那么我们建议把它们放在不同的数据库里。如果项目或者用户是相互关联的, 并且可以相互使用对方的资源,那么应该把它们放在同一个数据库里,但可能在不同的模式 中。模式只是一个纯粹的逻辑结构并且谁能访问某个模式由权限系统管理。有关管理模式的更多信息在Section 5.8中。
数据库是使用CREATE DATABASE
(见Section 22.2),并且用DROP DATABASE
命令删除(见Section 22.5)。要确定现有数据库的集合,可以检查系统目录pg_database
,例如
SELECT datname FROM pg_database;
psql程序的\l
元命令和-l
命令行选项也可以用来列出已有的数据库。
SQL标准把数据库称作“目录”,不过实际上没有区别。