postgres中的延迟索引

时间:2017-10-24 04:26:58

标签: postgresql

我们有一个将数据存储在postgres数据库中的系统。在某些情况下,数据库的大小已增长到几GB。

升级此系统时,将备份所述数据库中的数据,最后将其还原到数据库中。由于数据量巨大,索引在恢复过程中需要很长时间才能完成(约30分钟),从而延迟了升级过程。

是否有一种方法可以将数据复制和索引分为两个步骤,首先复制数据以完成升级,然后再进行索引,这可以在以后的后台完成?

谢谢!

2 个答案:

答案 0 :(得分:6)

pg_dumppg_restore没有内置的方法。但pg_restore的{​​{1}}选项有很大帮助。

-j。但CREATE INDEX CONCURRENTLY不使用它。

能够恢复除了FK约束不依赖的二级索引之外的所有内容,这将是非常好的。然后使用pg_restore将这些恢复为单独的阶段。但目前还没有这样的支持,你必须自己编写。

但是,您可以过滤CREATE INDEX CONCURRENTLY使用的目录,因此您可以执行一些hacky脚本来完成所需的工作。

答案 1 :(得分:1)

在使用pg_dump的同时,可以在postgresql中分离数据并创建索引。 在这里,数据前是指架构,数据后是指索引和触发器。

从文档中

  

-section = sectionname仅转储命名部分。节名称可以是前数据,数据或后数据。该选项可以指定更多   不止一次选择多个部分。默认为全部转储   部分。

     

数据部分包含实际的表数据,大对象内容,   和序列值。数据后项目包括索引的定义,   触发器,规则和约束(经过验证的检查除外)   约束。前置数据项包括所有其他数据定义项。

也许这会有所帮助:)