使用索引转储postgres数据

时间:2011-09-30 12:45:19

标签: postgresql indexing vacuum

我有一个Postgres 9.0数据库,我经常收集它的数据转储。

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

我的问题是:

  1. 有没有办法转储数据库数据和该数据库的索引?
  2. 如果有办法,值得付出努力(我的意思是使用索引转储数据会比真空吸尘器更好)?
  3. Oracle有一些“数据泵”命令可以更快地实现imp和exp。 postgres有类似的东西吗?
  4. 提前致谢, 安德烈

2 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:3)

最佳实践可能是

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

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

我们存储创建索引和脚本的脚本,这些脚本在版本控制下在不同文件中创建表。这就是原因。

在您的情况下,changing autovacuum settings可能会对您有所帮助。您可能还会考虑为某些表或所有表禁用autovacuum,但这可能有点极端。