我正在尝试在两台服务器之间移动postgresql。两台服务器之间有rsync
个连接。
我的桌子很大,总共约200GB,在15个桌子上有近8亿行。对于这一数据量,我发现关键表的COPY
命令远远快于通常的pg_dump
。但是,这只会转储数据。
有没有办法以这种方式只转储数据,但是然后转储数据库创建脚本 - 这将创建表,并单独索引?我在考虑以下顺序:
COPY
所有表都进入文件系统。因此,只有15个文件。 RSYNC
这些文件到新服务器。 COPY FROM
所有表格,一个接一个。有点痛苦,但值得。 我正在寻找方法来获取PG在旧服务器上转储的#3和#5的一些脚本。 PG世界的复杂性是表格的OIDs
等。这会影响新服务器上的表格和数据吗? pg_dump
reference在其帮助材料中有点神秘。
对于#3,jsut创建“schema”和表,我可以这样做:
pg_dump --schema-only mybigdb
这会带来所有OID和其他并发症,从而成为完成第3步的好方法吗?
只有#5,不知道我会做什么。只是索引等我是否必须查看“仅架构”文件并将索引分开?
欣赏任何指针。
答案 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
。这不允许您将-j
与pg_dump
一起使用,但您仍可以使用pg_restore -j
并行创建索引。