PostgreSQL核心揭秘(一):数据库集簇
PostgreSQL 数据库集簇(Database Cluster)是指一个或多个数据库实例的集合,这些数据库实例共享相同的数据库系统文件和配置。这种设计允许在同一个 PostgreSQL 服务器上管理多个数据库,而每个数据库又可以独立地运行和存储数据。PostgreSQL 数据库集簇的主要特点1. 多数据库管理:一个 PostgreSQL 集簇可以包含多个数据库,用户可以在同一实例中创建和管理多
PostgreSQL 数据库集簇(Database Cluster)是指一个或多个数据库实例的集合,这些数据库实例共享相同的数据库系统文件和配置。这种设计允许在同一个 PostgreSQL 服务器上管理多个数据库,而每个数据库又可以独立地运行和存储数据。
PostgreSQL 数据库集簇的主要特点
1. 多数据库管理:
一个 PostgreSQL 集簇可以包含多个数据库,用户可以在同一实例中创建和管理多个数据库。
每个数据库都有独立的用户和权限设置。
2. 共享系统资源:
所有数据库共享同一个集簇的系统资源,包括内存、CPU、磁盘等。
集簇内的各个数据库共享相同的配置文件和系统目录。
3. 数据目录:
PostgreSQL 集簇在文件系统中有一个数据目录,所有数据库的数据和元数据都存储在此目录中。
数据目录中包含多个子目录和文件,管理不同数据库和其对象。
4. 配置和管理:
集簇的配置参数存储在 postgresql.conf 文件中,影响所有数据库的行为。
通过工具如 pg_ctl 和 psql 等,可以管理数据库集簇的启动、停止和其他操作。
5. 高可用性和扩展性:
PostgreSQL 支持多种高可用性解决方案(如流复制、热备份),适用于集簇的部署。
可以在集簇中添加更多数据库或扩展现有数据库,以满足不同的需求。
PostgreSQL 数据库集簇的目录
archive/ - 存放归档的 WAL (Write-Ahead Logging) 日志文件,用于数据恢复和备份。
base/ - 存放数据库的主要数据文件,包含每个数据库的表和索引。
conn.sh - 一个脚本文件,用于管理数据库连接。
contrib/ - 存放 PostgreSQL 贡献模块和扩展的目录。
current_logfiles - 存放当前的日志文件信息。
global/ - 存放全局数据库信息,如用户和角色。
log/ - 存放数据库的日志文件。
pg_commit_ts/ - 存放事务提交时间戳的信息。
pg_dynshmem/ - 存放动态共享内存的信息,用于进程间通信。
pg_hba.conf - PostgreSQL 访问控制文件,定义用户连接数据库的权限。
pg_ident.conf - 存放标识文件,用于映射操作系统用户到 PostgreSQL 用户。
pg_logical/ - 存放逻辑复制相关的信息。
pg_multixact/ - 存放多事务信息,用于处理多事务的情况。
pg_notify/ - 存放通知信息,用于实现事件通知功能。
pg_replslot/ - 存放复制槽信息,用于逻辑复制。
pg_serial/ - 存放序列的状态信息。
pg_snapshots/ - 存放快照信息,用于事务管理。
pg_stat/ - 存放数据库统计信息的目录。
pg_stat_tmp/ - 存放临时的统计信息。
pg_subtrans/ - 存放子事务的信息。
pg_tblspc/ - 存放表空间的符号链接。
pg_twophase/ - 存放二阶段提交的事务信息。
PG_VERSION - 存放 PostgreSQL 数据库版本信息的文件。
pg_wal/ - 存放 WAL 日志文件,确保数据的持久性和可靠性。
pg_xact/ - 存放事务状态信息的目录。
postgresql.auto.conf - 自动生成的 PostgreSQL 配置文件。
postgresql.conf - PostgreSQL 主配置文件,定义数据库的参数设置。
postmaster.opts - 存放 PostgreSQL 启动时的选项配置。
postmaster.pid - 存放 PostgreSQL 服务进程的进程 ID。
start.sh - 启动 PostgreSQL 服务的脚本文件。
stop.sh - 停止 PostgreSQL 服务的脚本文件。
创建和管理数据库集簇
初始化集簇:
使用 initdb 命令来初始化一个新的数据库集簇,这会创建数据目录及必要的系统文件。
initdb -D /path/to/data_directory
启动集簇:
使用 pg_ctl 命令启动数据库集簇。
pg_ctl -D /path/to/data_directory start
连接到数据库:
使用 psql 命令连接到特定数据库。
psql -d database_name
查看集簇信息:
可以使用 \l 命令在 psql 中查看当前集簇中的所有数据库。
查看表语数据库目的对应关系
postgres=# select relname,oid,relfilenode from pg_class where relname = 'saas2';
relname | oid | relfilenode
---------+-------+-------------
saas2 | 16465 | 16465
[root@server07 pgdata]# ls ./base/5/16465
./base/5/16465
根据表名称查出文件路径
postgres=# select pg_relation_filepath('saas2');
pg_relation_filepath
----------------------
base/5/16465
[root@test19-server07 5]# ll -id 2605*
201703396 -rw------- 1 postgres postgres 16384 Aug 22 14:31 2605 //主题数据文件
201703397 -rw------- 1 postgres postgres 24576 Aug 22 14:31 2605_fsm //空闲空间映射文件
201705588 -rw------- 1 postgres postgres 8192 Aug 22 14:31 2605_vm //可见性映射文件
总结
PostgreSQL 数据库集簇是一个强大的功能,允许用户在一个数据库实例中高效地管理多个数据库。这种架构提供了灵活性和扩展性,适用于各种应用场景,包括小型应用到大型企业级解决方案。通过合理的配置和管理,用户可以充分利用 PostgreSQL 的强大功能。
公众号内直接回复加群也可以,扫码加群也可以,觉得帖子写的不错,点点关注,点点赞,多多转载,请多多支持。
往期帖子汇总:
数据库维护工具:数据迁移、性能监控、数据修复的全面工具汇总
上一篇:从零开始学PostgreSQL-工具篇2:碎片回收pg_repack
从零开始学PostgreSQL (十二):高效批量写入数据库
更多推荐
所有评论(0)