PG 9 中 Windows 和 Linux 之间的复制

PG 9 中 Windows 和 Linux 之间的复制

我在 Windows 2003 SP2 上运行 PostgreSQL 9。我正尝试在同样运行 PostgreSQL 9 的 Fedora 12 系统上复制它。

我遇到了这个错误信息:

/usr/pgsql-9.0/bin/postgres -D /var/lib/pgsql/9.0/data/ -p 5432
2011-02-11 17:43:26 ISTFATAL:  incorrect checksum in control file

由于防火墙的限制,我无法遵循官方说明一丝不苟。相反,我在服务器离线时压缩了数据目录的内容,并将其复制到 Linux 机器上。我在两个目录上运行了 sha1deep,没有不匹配的情况。我更改了权限,以便只有用户postgres和组才能访问文件。

现在,我该怎么做才能使复制正常工作?我尝试使用“pg_dumpall”,但系统抱怨数据库 ID 不匹配。

答案1

要使用流式复制,您必须在相同的操作系统上使用相同的 PostgreSQL 版本。Windows 和 Fedora 是不同的操作系统,因此不适用于流式复制。

如果你想要在不同版本和/或不同操作系统之间进行复制,你可以看看斯洛尼

答案2

使用 Postgresql 9.5.21 作为主服务器Windows 2012 R2和从服务器完成了此操作Ubuntu 14.04

你必须注意以下几点:

  • 最相似的 CPU(页面大小、架构、寄存器)。因此,您不能混合使用 64/32 位,或使用具有不同字节序或页面大小的 CPU;
  • 操作系统也具有相同的字节顺序:32 位或 64 位;
  • PG 的主版本相同:9.5.x 与相同或其他 9.5.x 版本(用于流复制,我正在使用,逻辑复制适用于不同版本的 PG);

因此,我在 Windows Server 上找到了已安装的 PG。编辑postgresql.conf以启用副本和 PITR,并pg_hba.conf允许连接。

然后转到 Ubuntu,在 PG 停止后,我从主服务器获取了以下内容:

pg_basebackup -D /tmp/db/ -X stream -R -U postgres -h ip-master

然后修改配置并将数据目录替换为/tmp/db

启动从属,并且启动并运行,但是看看这个:

2020-03-18 21:05:31.598 CET [44640] 日志:数据库系统已准备好接受只读连接

2020-03-18 21:05:31.631 CET [44645] 日志:开始在时间线 1 上的 36/C2000000 处从主节点流式传输 WAL

2020-03-18 21:05:31.905 CET [44646] [未知]@[未知] LOG:启动包不完整

2020-03-18 21:05:32.416 CET [44649] postgres@postgres FATAL:数据库区域设置与操作系统不兼容

2020-03-18 21:05:32.416 CET [44649] postgres@postgres DETAIL:数据库使用 LC_COLLATE“Italian_Italy.1252”初始化,setlocale() 无法识别。

2020-03-18 21:05:32.416 CET [44649] postgres@postgres 提示:使用其他语言环境重新创建数据库或安装缺少的语言环境。

有趣的是:复制有效,但您无法连接到数据库。

无论如何,如果你在 Windows 上原始复制数据目录,它就会非常有效。

当然,如果你用UTF-8重新创建集群,就完全没有问题了。

注意:非常感谢incognito官方ilmariIRC PG 频道提供的提示。

相关内容