我目前使用的是pg_dumpgzip的管道到split的管道.但问题是,所有输出文件都会更改.所以基于校验和的备份总是复制所有数据.

有没有其他好方法可以执行PostgreSQL数据库的增量备份,从备份数据中恢复完整的数据库?

例如,如果pg_dump可以使所有内容都绝对有序,那么所有更改只应用于转储的末尾,或者类似的地方.

推荐答案

Update: Check out Barman提供了一种更简单的备份方式.

你可以使用PostgreSQL's continuous WAL archiving法.首先需要设置wal_level=archive,然后执行完整的文件系统级备份(在发出pg_start_backup()pg_stop_backup()命令之间),然后通过配置archive_command选项复制较新的WAL文件.

优势:

  • WAL档案包括恢复数据库当前状态所需的一切
  • 几乎没有开销,复制WAL文件很便宜
  • 您可以在any个时间点恢复数据库(此功能称为PITR或时间点恢复)

缺点:

  • 设置起来比pg_dump更复杂
  • 完整备份将比pg_转储大得多,因为它包含所有内部表 struct 和索引
  • 由于恢复将需要很长时间,因此对于写操作繁重的数据库来说效果不佳.

有一些工具(如pitrtoolsomnipitr)可以简化设置和恢复这些配置.但我自己没用过.

Postgresql相关问答推荐

环境变量在Bash应用程序中没有出现

Postgres 对 WHERE 子句并行使用两个索引

无法将 json 范围读取为 pgtype.Int4range

求和直到达到一个值 postgresql

postgresql中多个左连接的空结果

为什么在 PostgreSQL 中忽略查询超时?

Docker - 判断 postgres 是否准备好

在postgresql中按经纬度查找最近的位置

处理 sqlalchemy 断开连接的更好方法

Nodemon - 安装期间clean exit - waiting for changes before restart

在 postgres 中删除所有共享相同前缀的表

在 postgres 中Decode解码相似的函数

Mac psql/readline - 未加载库

如何在 Postgresql 中正确使用 FETCH FIRST?

plpgsql:使用 2 个 OUT 参数调用函数

无法使用 sequelize 从本地 node 应用程序连接到 heroku postgresql 数据库

docker postgres 无法从指定端口启动

如何为 Postgres psql 设置时区?

如何使用 PostgreSQL 触发器来存储更改(SQL 语句和行更改)

使用 Postgres 在 Rust 的 Diesel 库中添加时间戳