Дамп postgres данные с индексами - PullRequest
7 голосов
/ 30 сентября 2011

У меня есть база данных Postgres 9.0, из которой я часто получаю дампы данных.

Эта база данных имеет много индексов, и каждый раз, когда я восстанавливаю дамп, postgres запускает фоновую задачу Пылесос (это верно?). Эта задача требует много времени и памяти для воссоздания индексов восстановленного дампа.

Мой вопрос:

  1. Есть ли способ выгрузить данные базы данных и индексы этой базы данных?
  2. Если есть способ, стоит ли усилий (я имел в виду, что дамп данных с индексами будет работать лучше, чем у пылесоса)?
  3. В Oracle есть команда «data pump», которая позволяет быстрее выполнять операции imp и exp. Есть ли в Postgres нечто подобное?

Заранее спасибо, Andre

Ответы [ 2 ]

8 голосов
/ 30 сентября 2011

Если вы используете pg_dump дважды, один раз с --schema-only и один раз с --data-only, вы можете разрезать вывод только для схемы на две части: первая с определениями таблицы и финальная часть сограничения и индексы.Нечто подобное можно сделать с помощью pg_restore.

3 голосов
/ 30 сентября 2011

Рекомендуется

  • восстановить схему без индексов
  • и, возможно, без ограничений,
  • загрузить данные,
  • затемсоздайте ограничения,
  • и создайте индексы.

Если индекс существует, массовая загрузка заставит PostgreSQL выполнять запись в базу данных и в индекс.А массовая загрузка сделает статистику вашей таблицы бесполезной.Но если сначала загрузить данные, а затем создать индекс, статистика автоматически обновляется.

Мы храним сценарии, которые создают индексы, и сценарии, которые создают таблицы, в разных файлах под управлением версиями.Вот почему.

В вашем случае изменение настроек автовакуума может вам помочь.Вы можете также рассмотреть возможность отключения автоочистки для некоторых или для всех таблиц, но это может быть немного экстремальным.

...