如果复制数据后PostgreSQL启动,数据正常吗?

pup*_*eno 5 postgresql migration

我正在将 PostgreSQL 数据库(即 /var/lib/postgresql)的数据从一台服务器复制到另一台服务器。服务器是相同的,除了一个是32位,另一个是64位。我已经复制了一次数据并且PostgreSQL启动了,但是,有没有办法验证数据的完整性?

Cra*_*ger 7

仅仅因为 PostgreSQL 启动就假设数据没问题是不安全的。Pg 不会在启动时对 DB 内容进行任何类型的综合验证。如果确实如此,则可能需要数小时(或数天或数周,对于更大的数据库)才能启动。

它没有任何验证工具。争论是如果正确管理数据,则不需要这些。在 9.3.x (x < 4) multixact 损坏错误之后,我开始质疑这个论点,但构建验证工具并不是一件小事。

如果 64 位服务器运行 32 位 PostgreSQL 二进制文件,并且它们是用相同的选项编译的,那就没问题了。

如果 64 位服务器正在运行 64 位 PostgreSQL 二进制文件,那么您没有将 datadir 复制到位,因为 32 位和 64 位 PostgreSQL 数据目录兼容并且 PostgreSQL 将拒绝启动。

我关心的是你如何复制数据目录。您必须复制,如果你只是做一个简单的文件系统级副本之前停止始发地和目的地的PostgreSQL服务器。要进行实时复制,您必须使用手册中记录的一种技术 - pg_basebackuppg_start_backup()+ rsync + pg_stop_backup()+ WAL 归档等。

如果您在不停止服务器的情况下复制了 datadir,它可能看起来被正确复制,但使用起来并不安全,并且可能被巧妙地或不那么微妙地损坏。