Мне нужно синхронизировать две базы данных PostgreSQL (некоторые таблицы из разработки db в db).PostgreSQL, обновлять существующие строки с помощью pg_restore
Так что я придумал этот сценарий:
[...]
pg_dump -a -F tar -t table1 -t table2 -U user1 dbname1 | \
pg_restore -a -U user2 -d dbname2
[...]
Проблема заключается в том, что это работает только для вновь добавленных строк. Когда я редактирую столбцы, отличные от PK, я получаю ошибку ограничения, а строка не обновляется. Для каждой сбрасываемой строки мне нужно проверить, существует ли она в целевой базе данных (по PK), и если она удаляет ее до INSERT/COPY.
Спасибо за советы.
Спасибо, все. Однако мне придется делать резервную копию многих 'join tables '(с помощью' on delete cascade' FKs), но это не должно быть проблемой. – woky
Не копируйте таблицы соединений - просто временно удалите все FK в эту таблицу. В противном случае вам придется резервировать ссылки на таблицы, таблицы, ссылающиеся на них, и так далее. Очень легко пропустить что-то важное. Я бы рекомендовал преобразовать все FK в «on no no action» или «on delete restrict». – Tometzky