安装与设计
版本选择(考虑支持周期)、包/源码安装、目录·表空间·参数标准、扩展(extension)策略。
PostgreSQL
凭借可扩展性与标准兼容性,PostgreSQL 已成为商用数据库的主流替代。自动故障切换的高可用集群、可恢复到任意时间点的备份、基于证据的调优,以及从 Oracle/Tibero 的迁移,都可以交给我们。
Architecture
最常见的开源组合:Patroni + 分布式配置存储(DCS)+ PgBouncer/HAProxy + pgBackRest。
Patroni 借助 etcd、Consul、ZooKeeper 等 DCS 选举主节点,主库故障时自动提升最合适的副本。应用通过 HAProxy(或 VIP)始终连接当前主库,PgBouncer 控制连接数。
WAL 由 pgBackRest 持续归档,因此可通过全量备份 + WAL 重放恢复到任意指定时间点。
Scope
版本选择(考虑支持周期)、包/源码安装、目录·表空间·参数标准、扩展(extension)策略。
流复制(物理)、逻辑复制(publication/subscription)、Patroni 自动切换、复制槽管理。
pgBackRest、Barman、pg_basebackup,WAL 归档,指定时间点恢复与定期验证。
shared_buffers、work_mem、WAL 与检查点、autovacuum、执行计划、索引与分区。
pg_stat_statements、pg_stat_activity、等待事件、复制延迟、膨胀、Grafana/PMM 仪表盘。
pg_upgrade(如 --link)或基于逻辑复制的低停机大版本升级。
SCRAM-SHA-256 认证、最小化 pg_hba.conf、角色设计、TLS、行级安全(RLS)、pgaudit。
ora2pg 评估与转换、PL/SQL → PL/pgSQL、数据校验、性能重新调优。
Replication
| 方式 | 特点 | 适用场景 | 注意事项 |
|---|---|---|---|
| 流复制 | 逐字节传输 WAL 的物理复制,可选同步/异步 | 高可用、只读副本、灾备 | 要求相同大版本与平台 |
| 逻辑复制 | 以表为单位通过 publication/subscription 传输变更 | 部分复制、大版本升级、整合 | DDL 与序列需另行处理 |
| Patroni | 基于 DCS 的选主、自动故障切换、配置管理 | 生产高可用标准 | DCS 可用性与隔离(fencing)设计是关键 |
| PgBouncer | 轻量连接池(session/transaction/statement 模式) | 缓解连接风暴 | transaction 模式下需确认会话级功能限制 |
Backup & PITR
有全量备份与 WAL 归档,就能回到故障或误操作之前的时间点。备份只有恢复过才算备份。
# 1) 停止服务并恢复到目标时间
sudo systemctl stop postgresql
sudo -u postgres pgbackrest --stanza=main --delta \
--type=time "--target=2026-10-20 13:55:00+09" \
--target-action=promote restore
# 2) 启动并确认恢复完成
sudo systemctl start postgresql
psql -c "select pg_is_in_recovery();" -- f 表示已提升-- postgresql.conf: shared_preload_libraries = 'pg_stat_statements'
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
SELECT queryid, calls,
round(total_exec_time::numeric, 1) AS total_ms,
round(mean_exec_time::numeric, 2) AS mean_ms,
rows, left(query, 80) AS query
FROM pg_stat_statements
ORDER BY total_exec_time DESC
LIMIT 10;Tuning
Migration
拥有商用数据库运维经验的 DBA 会提前指出兼容性差异。
用 ora2pg 报告评估对象与 PL/SQL 规模及转换难度
映射类型(NUMBER、DATE 等)、序列、分区、约束
将包、存储过程、触发器转为 PL/pgSQL,修改应用 SQL
全量加载后确定增量同步方式,校验行数与校验和
比较并调优业务代表查询的执行计划
演练 → 切换 → 稳定期监控
Lifecycle
FAQ
复制本身是 PostgreSQL 内置功能,但故障检测、提升、隔离旧主库与连接切换需要额外工具。Patroni 是自动化这些工作的代表性开源工具。
连接数多或短连接频繁的环境效果明显。但在 transaction 池模式下,需要确认会话级功能(部分预处理语句用法、会话变量等)的限制。
常见做法是用逻辑复制同步新版本集群,再在很短的切换时间内完成迁移。如果可以接受停机,pg_upgrade 更简单。
优化器、锁与事务行为不同,部分查询需要改写或调整索引。我们会在迁移前后比较代表性查询,并把调优纳入迁移范围。
告诉我们您使用的云、数据库版本、架构与困扰,我们将提出评估范围与实施方式。