Я создал дамп базы данных с помощью pg_dump в "произвольном" формате (-Fc). Этот формат позволяет вызывать pg_restore с опцией "jobs" (-j8). Параметры заданий запускают 8 процессов и восстанавливают подавляющее большинство связей в моей базе данных в течение 10 минут.
Осталось 4 процесса. Один из них - это обновление материализованного представления, а остальные 3 - это индексы, которые будут применяться к трем таблицам, которые материализованное представление использует в качестве источников данных. Индексы «ждут» согласно pg_stat_activity, предположительно потому, что REFRESH
материализованного представления все еще обращается к исходным таблицам.
Когда индексы на месте, обновление представления занимает всего пару минут. Поскольку в течение REFRESH
индексы отсутствуют, я отключил процесс REFRESH
в 17 часов, что привело к сбою pg_restore.
Как я могу
- Установите порядок элементов, чтобы индексы создавались первыми
- Отключите обновление материализованного представления и сделайте это вручную позже
- Измените файл дампа в настраиваемом формате, чтобы сказать "БЕЗ ДАННЫХ".
- Перехватить оператор
REFRESH MATERIALIZED VIEW
и выбросить его в корзину
Или любое другое решение, которое выполняет свою работу?