You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL服务器能否创建数据一致的双数据库?求实现方法

PostgreSQL 拆分工作与培训数据库的解决方案

方法一:用模板库快速初始化(适合一次性创建)

  • 先清理原数据库的活跃连接,不然没法用模板创建:
    \c postgres
    SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = '你的原数据库名';
    
  • 直接基于原库克隆出两个新库:
    CREATE DATABASE work_db WITH TEMPLATE 你的原数据库名;
    CREATE DATABASE training_db WITH TEMPLATE 你的原数据库名;
    
  • 提醒: 创建期间原库会被锁定,挑业务低峰期操作;大库用这个方法比备份恢复快很多,因为是文件级复制。

方法二:pg_dump + pg_restore 备份恢复(更灵活)

  • 先导出原库的完整备份:
    pg_dump -U 你的用户名 -d 你的原数据库名 -F c -f original_db.dump
    
    说明: -F c 是自定义压缩格式,恢复速度快;要纯SQL脚本的话换 -F p。
  • 分别恢复到两个新库:
    # 先建空库
    createdb -U 你的用户名 work_db
    createdb -U 你的用户名 training_db
    
    # 恢复到工作库
    pg_restore -U 你的用户名 -d work_db original_db.dump
    # 恢复到培训库
    pg_restore -U 你的用户名 -d training_db original_db.dump
    
  • 优势: 备份时可以过滤数据(比如用 -t 指定要同步的表,--exclude-table 排除不需要的),适合后续要调整培训库数据的情况;而且不用长时间锁定原库。

后续数据同步(可选)

如果之后需要保持两个库和工作库数据一致,可选这两种方式:

  • 定时备份恢复:写个脚本定时跑pg_dump+pg_restore,适合培训库不需要实时同步的场景。
  • 逻辑复制:工作库建发布,培训库建订阅,实现增量同步,适合近实时需求:
    -- 在工作库创建发布(同步所有表)
    CREATE PUBLICATION work_pub FOR ALL TABLES;
    
    -- 在培训库创建订阅
    CREATE SUBSCRIPTION training_sub CONNECTION 'dbname=work_db user=你的用户名' PUBLICATION work_pub;
    
    注意: 逻辑复制需要PostgreSQL 10及以上版本,而且所有要同步的表必须有主键或唯一索引。

内容的提问来源于stack exchange,提问作者millilerato

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 10:02:17