# 23.1.概述
少量对象(如角色、数据库和表空间名称)在集群级别定义并存储在pg_全球
表空间。集群内部有多个数据库,它们彼此隔离,但可以访问集群级别的对象。每个数据库中都有多个模式,其中包含表和函数等对象。因此,完整的层次结构是:集群、数据库、模式、表(或其他类型的对象,如函数)。
连接到数据库服务器时,客户端必须在其连接请求中指定数据库名称。每个连接不可能访问多个数据库。但是,客户端可以打开同一数据库或不同数据库的多个连接。数据库级安全有两个组成部分:访问控制(请参阅第21.1节),在连接级别进行管理,以及授权控制(请参阅第5.7节),通过拨款系统进行管理。外部数据包装(参见博士后_fdw)允许一个数据库中的对象充当其他数据库或集群中对象的代理。旧的dblink模块(请参阅数据库链接)提供类似的功能。默认情况下,所有用户都可以使用所有连接方法连接到所有数据库。
如果一个PostgreSQL server集群计划包含不相关的项目或用户,而这些项目或用户在很大程度上应该彼此不知道,建议将它们放入单独的数据库中,并相应地调整授权和访问控制。如果项目或用户是相互关联的,因此应该能够使用彼此的资源,那么它们应该放在同一个数据库中,但可能放在不同的模式中;这提供了一个带有名称空间隔离和授权控制的模块化结构。有关管理模式的更多信息,请参阅第5.9节.
虽然可以在单个集群中创建多个数据库,但建议仔细考虑收益是否超过风险和限制。特别是,共享WAL的影响(参见第30章)有备份和恢复选项。虽然从用户的角度来看,集群中的各个数据库是孤立的,但从数据库管理员的角度来看,它们是紧密联系在一起的。
数据库是用创建数据库
命令(参见第23.2节)然后被摧毁了删除数据库
命令(参见第23.5节)。要确定现有数据库集,请检查pg_数据库
例如,系统目录
SELECT datname FROM pg_database;
这个psql节目\l
元命令和-l
命令行选项对于列出现有数据库也很有用。
# 笔记
SQL标准将数据库称为“目录”,但在实践中没有区别。