我在测试服务器上有12个测试数据库,我每天从主服务器生成转储并将其复制到测试服务器。我使用以下命令填充测试数据库:
zcat ${dump_address} | psql $db_name
每个数据库耗时45分钟。如果我只对一个数据库这样做,然后使用:
是否会更快?CREATE DATABASE newdb WITH TEMPLATE olddb;
的其余部分?我可以试试其他的方法吗?
这取决于有多少数据和索引。一些加快速度的方法包括:
- 确保转储没有
INSERT
命令-它们往往比COPY
慢得多。 - 如果您有很多索引或约束,请使用自定义或归档转储格式,然后调用
pg_restore -j $my_cpu_count
。-j
控制并发创建索引的线程数量,并且索引创建通常是cpu受限的。 - 使用更快的磁盘
- 完整复制
$PGDATA
(rsync或一些花哨的快照)。