移动Postgresql-下载所有数据和表创建,但不包含索引
我正在尝试在两台服务器之间移动postgresql。两台服务器之间有移动Postgresql-下载所有数据和表创建,但不包含索引,postgresql,Postgresql,我正在尝试在两台服务器之间移动postgresql。两台服务器之间有rsync连接 我的表很大,总共约200GB,15个表中有近8亿行。对于这些数据量,我发现键表的COPY命令比通常的pg_dump要快得多。但是,这只会转储数据 有没有一种方法可以这样只转储数据,然后还转储数据库创建脚本——它将创建表和单独的索引?我在考虑以下顺序: 将所有表复制到文件系统中。因此,只有15个文件 RSYNC将这些文件同步到新服务器 在新服务器上,创建一个新的PG数据库:表、外键等,但还没有索引 在这个全新的PG
rsync
连接
我的表很大,总共约200GB,15个表中有近8亿行。对于这些数据量,我发现键表的COPY
命令比通常的pg_dump
要快得多。但是,这只会转储数据
有没有一种方法可以这样只转储数据,然后还转储数据库创建脚本——它将创建表和单独的索引?我在考虑以下顺序:
将所有表复制到文件系统中。因此,只有15个文件李>
RSYNC
将这些文件同步到新服务器李>
在新服务器上,创建一个新的PG数据库:表、外键等,但还没有索引李>
在这个全新的PG数据库中,从所有表中逐个复制。有点痛,但值得李>
然后一次性创建索引李>
我正在想办法让PG在旧服务器上为#3和#5转储一些脚本。PG世界中的复杂问题是表等的OID
。这会影响新服务器上的表和数据吗?这本书的帮助材料有点晦涩难懂
对于#3,jsut“schema”和表的创建,我可以这样做:
pg_dump——仅模式mybigdb
这会带来所有的OID和其他并发症,从而成为完成第3步的好方法吗
只花了5英镑,我不知道该怎么办。只是索引等。我是否必须查看“仅模式”文件并分离出索引
感谢你的指点 有趣的是,您描述的序列非常好地描述了pg_dump
/pg_restore
的功能(有一些疏忽:例如,出于性能原因,您在还原数据之前不会定义外键)
因此,我认为你应该使用pg_dump
,而不是重新发明轮子
您可以通过pg_dump
获得更好的性能,如下所示:
- 使用目录格式(
-Fd
)并将复制
命令与-j作业数
并行化
- 使用
pg_Restore
恢复转储,并使用-j作业数
对多个并行工作进程进行数据恢复和索引创建
唯一的缺点是,如果使用目录格式,则必须等待pg_dump
完成后才能开始pg_restore
。如果这是一个杀手锏,您可以使用自定义格式(-Fc
)并将结果导入pg\u restore
。这将不允许您将-j
与pg_dump
一起使用,但您仍然可以使用pg_restore-j
并行化索引创建,这样您就不必担心OID
了,它们只在内部使用。你声称copy
比pg\u dump
+pg\u restore
更快,对此我有点惊讶。纯文本转储实际上将使用COPY
,自定义转储可以使用多个线程恢复。但两者基本上都将执行您计划执行的操作:创建表、加载数据、创建索引。克隆完整Postgres实例的另一个选项是pg_basebackup
谢谢Laurenz。可以肯定的是,如果系统专用于PG,并且有32GB RAM,而目前没有其他事情发生,那么对于还原来说,精确的命令是什么?这取决于转储目录的名称、PostgreSQL超级用户名以及新服务器的主机、端口和数据库名称。-j
的值取决于内核的数量以及I/O系统可以处理的数量。