Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
移动Postgresql-下载所有数据和表创建,但不包含索引_Postgresql - Fatal编程技术网

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

移动Postgresql-下载所有数据和表创建,但不包含索引,postgresql,Postgresql,我正在尝试在两台服务器之间移动postgresql。两台服务器之间有rsync连接 我的表很大,总共约200GB,15个表中有近8亿行。对于这些数据量,我发现键表的COPY命令比通常的pg_dump要快得多。但是,这只会转储数据 有没有一种方法可以这样只转储数据,然后还转储数据库创建脚本——它将创建表和单独的索引?我在考虑以下顺序: 将所有表复制到文件系统中。因此,只有15个文件 RSYNC将这些文件同步到新服务器 在新服务器上,创建一个新的PG数据库:表、外键等,但还没有索引 在这个全新的PG

我正在尝试在两台服务器之间移动postgresql。两台服务器之间有
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系统可以处理的数量。