移动Postgresql - 下载所有数据和表创建,但没有索引

时间:2017-02-27 00:49:46

标签: postgresql

我正在尝试在两台服务器之间移动postgresql。两台服务器之间有rsync个连接。

我的桌子很大,总共约200GB,在15个桌子上有近8亿行。对于这一数据量,我发现关键表的COPY命令远远快于通常的pg_dump。但是,这只会转储数据。

有没有办法以这种方式只转储数据,但是然后转储数据库创建脚本 - 这将创建表,并单独索引?我在考虑以下顺序:

  1. COPY所有表都进入文件系统。因此,只有15个文件。
  2. RSYNC这些文件到新服务器。
  3. 在新服务器上,创建一个新的PG数据库:表,外键等。但还没有索引。
  4. 在这个新的PG数据库中,COPY FROM所有表格,一个接一个。有点痛苦,但值得。
  5. 然后一次创建索引。
  6. 我正在寻找方法来获取PG在旧服务器上转储的#3和#5的一些脚本。 PG世界的复杂性是表格的OIDs等。这会影响新服务器上的表格和数据吗? pg_dump reference在其帮助材料中有点神秘。

    对于#3,jsut创建“schema”和表,我可以这样做:

    pg_dump --schema-only  mybigdb
    

    这会带来所有OID和其他并发症,从而成为完成第3步的好方法吗?

    只有#5,不知道我会做什么。只是索引等我是否必须查看“仅架构”文件并将索引分开?

    欣赏任何指针。

1 个答案:

答案 0 :(得分:1)

有趣的是,你所描述的序列是对pg_dump / pg_restore所做的很好的描述(有一些疏忽:例如,出于性能原因,你不会在你之前定义一个外键恢复数据)。

所以我认为你应该使用pg_dump而不是重新发明轮子。

您可以通过pg_dump获得更好的效果,如下所示:

  • 使用目录格式(-Fd)并将COPY命令与-j number-of-jobs并行化。

  • 使用pg_restore恢复转储,并使用-j number-of-jobs为多个并行工作人员进行数据恢复和索引创建。

唯一的缺点是,如果您使用目录格式,则必须等待pg_dump完成才能启动pg_restore。如果这是一个杀手,您可以使用自定义格式(-Fc)并将结果通过管道传输到pg_restore。这不允许您将-jpg_dump一起使用,但您仍可以使用pg_restore -j并行创建索引。