dimanjy
@dimanjy
Недопрограммист и полуинженер.

Как восстановить базу PostgreSQL из двух дампов?

На сайте каждую ночь создается дамп базы (в простом текстовом формате):

sudo -u postgres pg_dump ${DB} | gzip > ../backup/`date +%Y-%m-%d`.${DB}.sql.gz


Редакторы на сайте случайно снесли часть записей. Вроде бы не страшно - есть бэкап от 26-го числа, но как назло 27-го и 28-го на сайте пользователи понадобавляли еще много записей.

Теперь нужно в базу от 28-го числа (с новыми записями, но без старых нужных) как-то вернуть стертые данные, которые есть в базе от 26-го (но нет новых данных, добавленных юзерами).

Подскажите, как это сделать?

PS. Так как при прямом накатывании на существующую базу (думал, а вдруг получится), сыплются ошибки, то я написал парсер дампа на Питоне и могу формировать построчные записи типа
COPY table1 (id, поля... ) FROM stdin;
1 данные для полей
\.
COPY table1 (id, поля...) FROM stdin;
2 данные для полей
\.

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

В качестве кривого решения мне видится создание отдельной базы от 26-го и из нее через Питон выбирать объекты и складывать в базу от 28-го программно. Но это еще сидеть полдня кодить.

Как вообще "красиво" такая задача решается только средствами PostgreSQL? Ведь решается же?
  • Вопрос задан
  • 1018 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы