我们可以在两个操作系统之间复制postgres数据吗?

时间:2017-10-06 10:05:10

标签: database windows postgresql ubuntu database-replication

我想将windows服务器的postgresql数据复制到linux服务器,我知道如何在相同的操作系统之间进行复制,但该方法不适用于windows和linux。如果是,那么更好的方法是什么?

2 个答案:

答案 0 :(得分:1)

您不能在不同的操作系统之间使用流式复制。

查看at the PostgreSQL Wiki以获取复制解决方案列表。其中一些应该适合你。

从PostgreSQL v10开始,您可以考虑logical replication

答案 1 :(得分:1)

使用Postgresql 9.5.21作为Windows 2012 R2上的主服务器和Ubuntu 14.04上的从机来完成此操作。

您必须注意以下几点:

  • 最相似的CPU(页面大小,体系结构,寄存器)。因此,您不能混合使用64/32位或使用具有不同字节序或页面大小的CPU;

    • O.S。的字节序也相同: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] [未知] @ [未知]日志:不完整的启动数据包

    2020-03-18 21:05:32.416 CET [44649] postgres @ postgres致命:数据库语言环境与操作系统不兼容

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

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

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

    无论如何,如果您在Windows上原始复制数据目录,它的工作就像一个超级按钮。

    当然,如果您使用UTF-8重新创建集群,则完全没有问题。

n.b .:非常感谢官方IRC PG频道上的incognitoilmari的提示。