В настоящее время я работаю над созданием дампа базы данных одного из наших клиентов таким образом, чтобы мы могли создавать новые базы данных из базовой структуры этого клиента, но без переноса их личных данных.
До сих пор мне удавалось успешно использовать команду pg_dump
в сочетании с командами --exclude_table
и exclude-table-data
, что позволило мне получить только те данные, которые мне действительно понадобятся для этой задачи.
Тем не менее, есть несколько таблиц, в которых смешаны строки, ссылающиеся на некоторые данные, которые я оставил, с другими строками, которые ссылаются на данные, которые я должен был принести, и это вызывает у меня несколько проблем во время операции восстановления. В частности, когда дамп пытается применить ограничения FOREIGN KEY
для определенных столбцов в этих таблицах, он терпит неудачу, потому что есть некоторые строки с ключами, которые не имеют совпадающих данных в соответствующей внешней таблице - потому что я решил не приносить данные этой таблицы!
Я знаю, что могу войти в базу данных после завершения дампа, удалить все строки, которые ссылаются на данные, которые больше не существуют, и создать ограничение самостоятельно, но я хотел бы максимально автоматизировать этот процесс. Есть ли способ указать pg_dump
или pg_restore
(или любой другой программе) не переносить строки из таблицы A, если они ссылаются на таблицу B, если данные таблицы B были исключены из резервной копии? Или сообщить Postgres, что я хочу, чтобы этот конкретный внешний ключ был активен перед импортом данных таблицы?
Для справки: я работаю с PostgreSQL 9.2 на сервере HREL 7.