我们有一个将数据存储在postgres数据库中的系统。在某些情况下,数据库的大小已增长到几GB。
升级此系统时,将备份所述数据库中的数据,最后将其还原到数据库中。由于数据量巨大,索引在恢复过程中需要很长时间才能完成(约30分钟),从而延迟了升级过程。
是否有一种方法可以将数据复制和索引分为两个步骤,首先复制数据以完成升级,然后再进行索引,这可以在以后的后台完成?
谢谢!
答案 0 :(得分:6)
pg_dump
和pg_restore
没有内置的方法。但pg_restore
的{{1}}选项有很大帮助。
有-j
。但CREATE INDEX CONCURRENTLY
不使用它。
能够恢复除了FK约束不依赖的二级索引之外的所有内容,这将是非常好的。然后使用pg_restore
将这些恢复为单独的阶段。但目前还没有这样的支持,你必须自己编写。
但是,您可以过滤CREATE INDEX CONCURRENTLY
使用的目录,因此您可以执行一些hacky脚本来完成所需的工作。
答案 1 :(得分:1)
在使用pg_dump的同时,可以在postgresql中分离数据并创建索引。 在这里,数据前是指架构,数据后是指索引和触发器。
从文档中
-section = sectionname仅转储命名部分。节名称可以是前数据,数据或后数据。该选项可以指定更多 不止一次选择多个部分。默认为全部转储 部分。
数据部分包含实际的表数据,大对象内容, 和序列值。数据后项目包括索引的定义, 触发器,规则和约束(经过验证的检查除外) 约束。前置数据项包括所有其他数据定义项。
也许这会有所帮助:)