使用索引转储postgres数据

And*_*rao 7 postgresql indexing vacuum

我有一个Postgres 9.0数据库,我经常采用它的数据转储.

这个数据库有很多索引,每次我恢复转储postgres启动后台任务真空吸尘器(是吗?).该任务消耗大量处理时间和内存来重新创建已还原转储的索引.

我的问题是:

  1. 有没有办法转储数据库数据和该数据库的索引?
  2. 如果有办法,将值得努力(我的意思是倾销带有索引的数据将比真空吸尘器更好)?
  3. Oracle有一些"数据泵"命令可以更快地实现imp和exp.postgres有类似的东西吗?

谢谢,安德烈

wil*_*ser 8

如果你使用pg_dump两次,一次使用--schema-only,一次使用--data-only,你可以将模式输出分为两部分:第一部分使用裸表定义,最后部分使用约束和索引.可能用pg_restore做类似的事情.


Mik*_*ll' 7

最佳实践可能是

  • 恢复没有索引的模式
  • 并且可能没有限制,
  • 加载数据,
  • 然后创建约束,
  • 并创建索引。

如果索引存在,批量加载将使 PostgreSQL 写入数据库和索引。批量加载将使您的表统计信息无用。但是如果你先加载数据,然后创建索引,统计数据会自动更新。

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

在您的情况下,更改 autovacuum 设置可能会对您有所帮助。您也可以考虑为某些表或所有表禁用自动清理,但这可能有点极端。

  • 仅供参考,这几乎就是 pg_dump -> pg_restore 所做的。 (3认同)