迁移和同步 PostgreSQL 数据的利器!快来看看这些能力有没有打动你

数据库 PostgreSQL
命令 pgcopydb compare schema 仅限于比较 pgcopydb 当前抓取的有关 Postgres 模式的元数据。这意味着比较一组表、它们的属性、它们的索引和约束,以及序列值。

复制 Postgres 数据库到新服务器

使用 pgcopydb 的最简单方法是,仅使用 pgcopydb clone 命令,如以下示例所示。

$ export PGCOPYDB_SOURCE_PGURI="dbname=redrock"
$ export PGCOPYDB_TARGET_PGURI="postgres://user@target:5432/redrock"

$ pgcopydb clone

请注意,还可以使用选项--source和--target,设置数据库的 Postgres 连接字符串。在使用 Docker 容器时,使用环境变量特别有用。

您可能还会注意到,源端 Postgres 数据库和目标 Postgres 数据库必须是存在的,pgcopydb 才能运行。

复制 Postgres 用户和扩展

要复制 Postgres 用户,必须与目标数据库建立特权连接,如果要包含密码,还必须与源端数据库建立特权连接。有时希望将这些特权连接限制在最小范围内,这时可以使用如下所示的方法:

$ coproc ( pgcopydb snapshot --source ... )

# first two commands would use a superuser role
$ pgcopydb copy roles --source ... --target ...
$ pgcopydb copy extensions --source ... --target ...

# now it's possible to use a non-superuser role
$ pgcopydb clone --skip-extensions --source ... --target ...

$ kill -TERM ${COPROC_PID}
$ wait ${COPROC_PID}

复制数据库时如何编辑结构?

可以对 pgcopydb 操作进行拆分,一次运行一个操作。

请注意,与主命令pgcopydb clone相比,依赖于并发的并发能力和高性能表现会受到限制,因为主命令的不同部分彼此并发运行。

能够对不同步骤进行更多控制,来运行操作,仍然是有需要的。一个有趣的用例是,在复制数据之前对结构进行更改:

#
# pgcopydb uses the environment variables
#
$ export PGCOPYDB_SOURCE_PGURI=...
$ export PGCOPYDB_TARGET_PGURI=...

#
# we need to export a snapshot, and keep it while the indivual steps are
# running, one at a time
#
$ coproc ( pgcopydb snapshot )

$ pgcopydb dump schema --resume
$ pgcopydb restore pre-data --resume

#
# Here you can implement your own SQL commands on the target database.
#
$ psql -d ${PGCOPYDB_TARGET_PGURI} -f schema-changes.sql

# Now get back to copying the table-data, indexes, constraints, sequences
$ pgcopydb copy data --resume
$ pgcopydb restore post-data --resume

$ kill -TERM ${COPROC_PID}
$ wait ${COPROC_PID}

$ pgcopydb list progress --summary

请注意,为了确保操作的一致性,使用了pgcopydb snapshot命令。有关详细信息,请参阅恢复操作(快照)。

跟随模式或捕获数据更改

在实现数据变更捕获时,pgcopydb 和应用程序之间需要更多的同步点,才能实现一次干净的直接转换。

从初始副本和复制设置开始:

$ export PGCOPYDB_SOURCE_PGURI="dbname=redrock"
$ export PGCOPYDB_TARGET_PGURI="postgres://user@target:5432/redrock"

$ pgcopydb clone --follow

在命令运行时,使用 Postgres 的 pg_stat_replication 视图,检查 pgcopydb 进行的复制进度。

当滞后时间足够接近维护时段的规范时,就可以断开应用程序与源端数据库的连接,完成迁移,然后将应用程序重新连接到目标数据库:

$ pgcopydb stream sentinel set endpos --current

此命令必须带上与主命令pgcopydb clone --follow相同的--dir,以便与正在运行的进程共享相同的内部目录。

迁移结束后,现在使用以下命令,清理在捕获数据变更时创建的资源:

$ pgcopydb stream cleanup

另请参阅使用 Postgres 逻辑解码捕获数据变更,了解更多详细信息和其他操作模式。

如何验证结构和数据迁移?

命令 pgcopydb compare schema 仅限于比较 pgcopydb 当前抓取的有关 Postgres 模式的元数据。这意味着比较一组表、它们的属性、它们的索引和约束,以及序列值。

命令 pgcopydb compare data 运行一个 SQL 查询,该查询在每个 Postgres 实例上,计算每个表的数据的校验和,然后仅比较它们的校验和。这不是数据集的完整比较,可能存在校验和相同但数据不同的情况。

$ pgcopydb compare schema
$ pgcopydb compare data
责任编辑:武晓燕 来源: 红石PG
相关推荐

2022-02-23 14:18:53

If-Else入参接口

2021-09-27 22:25:28

手机电池充电

2018-03-06 09:54:48

数据库备份恢复

2023-03-17 18:58:36

日志查询同步

2020-08-04 07:02:00

TCPIP算法

2021-04-19 09:23:26

数字化

2018-01-30 17:54:37

数据库MySQLSQL Server

2018-07-30 14:24:16

机器学习神经网络函数

2020-12-25 10:35:42

编程语言C语言Java

2017-11-24 08:00:55

前端JSCSS

2018-02-24 14:59:39

区块链公共区块链私有区块链

2018-04-18 17:08:45

2020-04-16 09:35:53

数据科学机器学习数据分析

2011-04-06 15:01:20

BI数据库书评

2020-02-10 14:35:59

iPhone苹果iPhone 12

2018-05-02 15:41:27

JavaScript人脸检测图像识别

2023-07-27 08:40:45

PawSQL数据库

2018-03-12 10:35:01

LinuxBash快捷键

2019-11-20 08:20:00

系统更新手机体验

2023-11-15 08:22:42

Java开发小技巧
点赞
收藏

51CTO技术栈公众号