Назад | Перейти на главную страницу

загрузка большой базы данных (postgres) в локальную копию

У меня довольно большая база данных postgres на Amazon RDS (около 9 ГБ в сжатом виде), и иногда нам нужно скопировать ее и провести некоторые тесты на наших локальных машинах.

Создание дампа БД (pg_dump) и его загрузка - это слишком медленно, и, честно говоря, последние несколько раз мы просто застревали.

Есть ли простой способ разумно получить части БД? например, получить только изменения за последние 10 дней, а затем мы можем объединить их с локальной БД, которая у нас есть, или, может быть, получить БД частями и т. д.?

Я уверен, что я не первый, кому это нужно, но не смог найти достойного метода или руководства, чтобы объяснить, как это сделать.

Спасибо!

Сжатый дамп 9 ГБ на самом деле не такой большой. Вам просто нужно сделать все правильно:

  • дамп из инстанса EC2 в той же учетной записи AWS и регионе, где работает база данных RDS, а не через Интернет;
  • использовать формат дампа каталога (--format=directory или -Fd) - автоматически сжимается;
  • использовать параллельный дамп (например --jobs=16 или -j16) и параллельное восстановление;
  • использовать sslmode=disable в строке подключения или env PGSSLMODE=disable pg_dump … отключить SSL - некоторые версии AWS RDS имеют ограничение в 64 ГБ данных SSL для одного подключения;
  • помните, что база данных RDS, восстановленная из моментального снимка, происходит ужасно медленно, пока все данные не будут прочитаны хотя бы один раз - первое чтение происходит более чем в 10 раз медленнее, чем обычно, поскольку данные извлекаются из архивного хранилища (возможно, S3) по запросу - не делайте этого дамп из базы данных, недавно восстановленной из снимка;
  • перемещать его из AWS только после успешного дампа в сжатом состоянии.