Postgresql 使用索引转储postgres数据

Postgresql 使用索引转储postgres数据,postgresql,indexing,vacuum,Postgresql,Indexing,Vacuum,我有一个Postgres9.0数据库,我经常对它进行数据转储 这个数据库有很多索引,每次我恢复转储文件时,postgres都会启动后台任务吸尘器(是这样吗?)。该任务需要花费大量的处理时间和内存来重新创建已恢复转储的索引 我的问题是: 是否有方法转储数据库数据和该数据库的索引 如果有办法,是否值得付出努力(我的意思是用索引转储数据会比吸尘器性能更好) Oracle有一些“数据泵”命令,可以更快地导入和导出。postgres有类似的功能吗 提前感谢,, 安德烈最佳实践可能是 恢复没有索引的架构

我有一个Postgres9.0数据库,我经常对它进行数据转储

这个数据库有很多索引,每次我恢复转储文件时,postgres都会启动后台任务吸尘器(是这样吗?)。该任务需要花费大量的处理时间和内存来重新创建已恢复转储的索引

我的问题是:

  • 是否有方法转储数据库数据和该数据库的索引
  • 如果有办法,是否值得付出努力(我的意思是用索引转储数据会比吸尘器性能更好)
  • Oracle有一些“数据泵”命令,可以更快地导入和导出。postgres有类似的功能吗
  • 提前感谢,,
    安德烈

    最佳实践可能是

    • 恢复没有索引的架构
    • 而且可能没有限制
    • 加载数据
    • 然后创建约束
    • 并创建索引
    如果存在索引,则大容量加载将使PostgreSQL写入数据库和索引。大容量加载会使表统计数据变得无用。但是,如果您先加载数据,然后创建索引,那么统计数据将自动更新

    我们存储创建索引的脚本和在版本控制下在不同文件中创建表的脚本。这就是为什么


    在你的情况下,可能会帮助你。您也可以考虑禁用某些表或所有表的自动真空,但这可能有点极端。

    < P>如果您使用PGYDUMP两次,只使用一次-模式,并且只使用一次-数据,则可以将模式输出仅分为两部分:第一个是裸表定义,最后一部分是约束和索引。
    pg_restore可能也可以做类似的事情。

    这是一个好问题,因为当您使用pg_dump时,没有办法保存索引数据——必须在导入后重建索引。不过,你可以简单地将整个postgres数据目录加上焦油,而不是进行pg_转储。谢谢弗兰克,我会尝试的,也许这对我来说是最好的选择。我唯一关心的是不同的小postgres版本和操作系统之间的差异。@FrankFarmer,将整个数据目录涂上焦油,并将其移动到一个新的服务器,事情会“正常”吗?如果旧服务器位于较旧的CentOS和PG 8.x上,而新数据库位于新的硬件堆栈上,PG 9.6?仅供参考,这与PG_dump->PG_restore的功能差不多。@ScottMarlowe:不过OP只是在转储数据
    pg_dump——仅数据
    不包括
    CREATE INDEX
    语句。不过,一个
    --重建索引
    选项会很方便。也许我会研究一下。OP根本不清楚他们是否在用数据转储数据——是否只有数据。我猜这就是他们所说的“进行数据转储”的意思,但谁知道呢--重建索引将非常方便。这实际上应该接近公认的答案,PG文档本身应该说明这一点。否则,在许多真实场景中,转储和恢复都是非常简单的。