Применение ограничения внешнего ключа к таблице из pg_dump с параметром --exclude-table-data

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

До сих пор мне удавалось успешно использовать команду pg_dump в сочетании с командами --exclude_table и exclude-table-data, что позволило мне получить только те данные, которые мне действительно понадобятся для этой задачи.

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

Я знаю, что могу войти в базу данных после завершения дампа, удалить все строки, которые ссылаются на данные, которые больше не существуют, и создать ограничение самостоятельно, но я хотел бы максимально автоматизировать этот процесс. Есть ли способ указать pg_dump или pg_restore (или любой другой программе) не переносить строки из таблицы A, если они ссылаются на таблицу B, если данные таблицы B были исключены из резервной копии? Или сообщить Postgres, что я хочу, чтобы этот конкретный внешний ключ был активен перед импортом данных таблицы?

Для справки: я работаю с PostgreSQL 9.2 на сервере HREL 7.


person Jorge_Freitas    schedule 06.11.2017    source источник


Ответы (1)


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

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

person Park JongBum    schedule 24.02.2018