8

我有一个 Postgres 9.0 数据库,我经常对它进行数据转储。

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

我的问题是:

  1. 有没有办法转储数据库数据和该数据库的索引?
  2. 如果有办法,是否值得付出努力(我的意思是用索引转储数据会比吸尘器更好)?
  3. Oracle 有一些“数据泵”命令可以更快地进行 imp 和 exp。postgres 有类似的东西吗?

提前致谢, 安德烈

4

2 回答 2

11

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

于 2011-09-30T16:34:06.240 回答
7

最佳实践可能是

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

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

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

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

于 2011-09-30T13:31:31.797 回答