PostgreSQL 初始化完成后会自带三个系统数据库它们是数据库集群的基石。此外每个数据库内部还有系统模式即系统目录用于存储元数据。下面我从这两个层面为你详细说明。一、默认的系统数据库执行initdb或使用安装工具初始化数据目录后会自动创建三个数据库1.postgres用途默认的“管理数据库”作为工具、客户端和管理员连接的默认目标。当你执行psql而不指定数据库时就会连到这里。特点它是一个普通数据库可以删除但强烈不建议。很多管理脚本和运维工具都依赖它。你也可以在其中存放业务数据但通常只作为管理入口。注意如果删除了它需要手动指定template1才能连接到服务器。2.template1用途默认的数据库创建模板。执行CREATE DATABASE且不指定模板时会通过克隆template1来创建新数据库。特点你可以在template1中安装扩展如PostGIS、创建公共函数、添加自定义数据类型。之后创建的所有新数据库都会自动继承这些对象适合统一管理环境。可以连接但请不要在其中存放业务数据。拥有一个预设名为public的模式此模式默认对所有用户开放创建权限建议修改。3.template0用途纯净的、只读的备用模板包含数据库集群最原始的系统对象不受任何后期修改影响。特点默认不允许连接datallowconn false无法修改。这保证了它的绝对洁净。关键应用场景创建彻底干净的数据库使用CREATE DATABASE newdb TEMPLATE template0;可得到一个不含任何额外对象的干净库。恢复数据库时恢复操作常需连接到一个空库这时指定template0可避免与template1中的用户对象发生冲突。更改编码或区域设置创建数据库时如果新库的编码、LC_COLLATE或LC_CTYPE要和模板不同必须使用template0因为template1可能含有与新设置不兼容的数据。二、每个数据库内部都存在的系统目录除了上述三个数据库PostgreSQL 的真正元数据储存在每个数据库包括postgres、template1和你自己创建的库的以下两个系统模式中1.pg_catalog模式核心系统目录这是 PostgreSQL 的心脏存放着描述数据库结构、对象、安全权限的所有系统表。常见的有全局对象类储存在全局表空间但在每个库中可见pg_database记录集群中的所有数据库。pg_roles/pg_authid记录所有角色用户/组及认证信息。pg_tablespace记录所有表空间。数据库内对象类pg_class最核心的表记录了所有“关系”包括表、索引、视图、序列、物化视图、复合类型、TOAST表等。pg_attribute记录每个表的列信息。pg_index/pg_indexes索引信息。pg_proc函数和过程。pg_type数据类型。pg_constraint约束主键、外键、唯一、检查。pg_namespace模式/命名空间。pg_trigger/pg_rewrite触发器和规则视图的实现基础。pg_statistic/pg_stats优化器用的统计信息。pg_depend对象之间的依赖关系。系统视图与函数pg_catalog还包含大量pg_stat_*统计信息、pg_locks锁、pg_settings参数配置等视图功能等价于其他数据库的“性能库”。2.information_schema模式标准信息模式用途遵循 SQL 标准提供一套跨数据库的、可移植的元数据查询视图。特点内部实际上是pg_catalog系统表的包装视图但屏蔽了 PostgreSQL 特有的实现细节。包含tables、columns、views、routines、table_constraints等数十个标准视图。适用场景编写需要兼容多种数据库的通用管理脚本时优先使用。限制查询效率可能略低于直接访问pg_catalog并且不包含某些 PostgreSQL 特有的对象如枚举类型、GIN 索引方法等。总结系统数据库指的是postgres、template1和template0它们是初始化自动生成的物理数据库分别承担管理入口、默认模板和纯净备份的作用。系统库的广义理解也常指每个数据库内部的pg_catalog和information_schema模式它们是存储和检索元数据的逻辑“库”。与其他数据库的对比PostgreSQL 没有独立的mysql或sys数据库所有管理操作、性能监控都通过pg_catalog模式中的系统表/视图完成。
PostgreSQL 系统数据库有哪些
PostgreSQL 初始化完成后会自带三个系统数据库它们是数据库集群的基石。此外每个数据库内部还有系统模式即系统目录用于存储元数据。下面我从这两个层面为你详细说明。一、默认的系统数据库执行initdb或使用安装工具初始化数据目录后会自动创建三个数据库1.postgres用途默认的“管理数据库”作为工具、客户端和管理员连接的默认目标。当你执行psql而不指定数据库时就会连到这里。特点它是一个普通数据库可以删除但强烈不建议。很多管理脚本和运维工具都依赖它。你也可以在其中存放业务数据但通常只作为管理入口。注意如果删除了它需要手动指定template1才能连接到服务器。2.template1用途默认的数据库创建模板。执行CREATE DATABASE且不指定模板时会通过克隆template1来创建新数据库。特点你可以在template1中安装扩展如PostGIS、创建公共函数、添加自定义数据类型。之后创建的所有新数据库都会自动继承这些对象适合统一管理环境。可以连接但请不要在其中存放业务数据。拥有一个预设名为public的模式此模式默认对所有用户开放创建权限建议修改。3.template0用途纯净的、只读的备用模板包含数据库集群最原始的系统对象不受任何后期修改影响。特点默认不允许连接datallowconn false无法修改。这保证了它的绝对洁净。关键应用场景创建彻底干净的数据库使用CREATE DATABASE newdb TEMPLATE template0;可得到一个不含任何额外对象的干净库。恢复数据库时恢复操作常需连接到一个空库这时指定template0可避免与template1中的用户对象发生冲突。更改编码或区域设置创建数据库时如果新库的编码、LC_COLLATE或LC_CTYPE要和模板不同必须使用template0因为template1可能含有与新设置不兼容的数据。二、每个数据库内部都存在的系统目录除了上述三个数据库PostgreSQL 的真正元数据储存在每个数据库包括postgres、template1和你自己创建的库的以下两个系统模式中1.pg_catalog模式核心系统目录这是 PostgreSQL 的心脏存放着描述数据库结构、对象、安全权限的所有系统表。常见的有全局对象类储存在全局表空间但在每个库中可见pg_database记录集群中的所有数据库。pg_roles/pg_authid记录所有角色用户/组及认证信息。pg_tablespace记录所有表空间。数据库内对象类pg_class最核心的表记录了所有“关系”包括表、索引、视图、序列、物化视图、复合类型、TOAST表等。pg_attribute记录每个表的列信息。pg_index/pg_indexes索引信息。pg_proc函数和过程。pg_type数据类型。pg_constraint约束主键、外键、唯一、检查。pg_namespace模式/命名空间。pg_trigger/pg_rewrite触发器和规则视图的实现基础。pg_statistic/pg_stats优化器用的统计信息。pg_depend对象之间的依赖关系。系统视图与函数pg_catalog还包含大量pg_stat_*统计信息、pg_locks锁、pg_settings参数配置等视图功能等价于其他数据库的“性能库”。2.information_schema模式标准信息模式用途遵循 SQL 标准提供一套跨数据库的、可移植的元数据查询视图。特点内部实际上是pg_catalog系统表的包装视图但屏蔽了 PostgreSQL 特有的实现细节。包含tables、columns、views、routines、table_constraints等数十个标准视图。适用场景编写需要兼容多种数据库的通用管理脚本时优先使用。限制查询效率可能略低于直接访问pg_catalog并且不包含某些 PostgreSQL 特有的对象如枚举类型、GIN 索引方法等。总结系统数据库指的是postgres、template1和template0它们是初始化自动生成的物理数据库分别承担管理入口、默认模板和纯净备份的作用。系统库的广义理解也常指每个数据库内部的pg_catalog和information_schema模式它们是存储和检索元数据的逻辑“库”。与其他数据库的对比PostgreSQL 没有独立的mysql或sys数据库所有管理操作、性能监控都通过pg_catalog模式中的系统表/视图完成。