powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Не работает отложенная проверка ключей при восстановлении дампа с параметром --data-only
8 сообщений из 8, страница 1 из 1
Не работает отложенная проверка ключей при восстановлении дампа с параметром --data-only
    #39952053
комит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги, добрый вечер.


Когда восстанавливаю дамп в БД, в которой нет объектов - все нормально.

КОгда восстанавливаю дамп, в БД в которой есть пустые таблицы и параметр pg_restore --data-only - появляются ошибки типа

ОШИБКА: INSERT или UPDATE в таблице "employ" нарушает ограничение внешнего ключа "hgjhg86cb"
Ключ (id)=(101) отсутствует в таблице "template".



Т.е. получается что таблица template еще не залилась, а employ пытается залиться и не проходит проверку.



Подскажите, как сделать отложенную проверку внешних ключей в pg_restore с параметром --data-only ?
...
Рейтинг: 0 / 0
Не работает отложенная проверка ключей при восстановлении дампа с параметром --data-only
    #39952054
комит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
по идее ведь надо только session_replication_role поменять в сессии.

но как?
...
Рейтинг: 0 / 0
Не работает отложенная проверка ключей при восстановлении дампа с параметром --data-only
    #39952143
комит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Смотрю файлы, сформированные через параметр --list

Последовательность восстановления таблиц одинаковая с параметром --data-only и без него.

Однако, без параметра --data-only таблицы нормально восстанавливаются.

Значит там как-то включена отложенная проверка ограничений.


А с --data-only последовательность уже начинает играть роль. Таблицы восстанавлюваются, упорядоченные по имени, но часто бывает что таблица, которая для внешнего ключа нужна еще не восстановилсь и тогда ошибка. Если сменить последовательность в ручную - нормально восстанавливается.

Но хотелось бы все-такие как-то включить отложенную проверку ограничений.



Как это возможно сделать?


Ну или как вообще восстановить данные в пустые таблицы, которые уже имеют внешние ключи друг на друга?
...
Рейтинг: 0 / 0
Не работает отложенная проверка ключей при восстановлении дампа с параметром --data-only
    #39952185
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
комит
Смотрю файлы, сформированные через параметр --list

Последовательность восстановления таблиц одинаковая с параметром --data-only и без него.

Однако, без параметра --data-only таблицы нормально восстанавливаются.

Значит там как-то включена отложенная проверка ограничений.


А с --data-only последовательность уже начинает играть роль. Таблицы восстанавлюваются, упорядоченные по имени, но часто бывает что таблица, которая для внешнего ключа нужна еще не восстановилсь и тогда ошибка. Если сменить последовательность в ручную - нормально восстанавливается.

Но хотелось бы все-такие как-то включить отложенную проверку ограничений.



Как это возможно сделать?


Ну или как вообще восстановить данные в пустые таблицы, которые уже имеют внешние ключи друг на друга?



Без --data-only сначала создаются таблицы БЕЗ foreign keys/pk/indexes и тд только именно таблицы с полями.
Потом заливаются данные.
А потом уже создаются все ограничения... поэтому и работает.
Никакой отложенной проверки ограничений нет в явном виде.

Так что руками последовательность восстановления таблиц задавать исходя из структуры базы.

>>Как это возможно сделать?
Если FK не обьявленны как DEFERRABLE INITIALLY DEFERRED (а они почти никогда так не объявлены потому что это сильно дорого по ресурсам)
то никак... это вообще не задача pg_dump/restrore - кастомные задачи решаются кастомным же скриптованием.

>>Ну или как вообще восстановить данные в пустые таблицы, которые уже имеют внешние ключи друг на друга?
1)руками в нужной последовательности заливать
или
2)сначала удалить fk мешающие потом залить данные потом создать fk заново
или
3)залить с session_replication_role = replica но тогда они вообще проверяться не будут и можно мусор в базу нарушающий все что можно залить будет
...
Рейтинг: 0 / 0
Не работает отложенная проверка ключей при восстановлении дампа с параметром --data-only
    #39952203
комит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk
комит
Смотрю файлы, сформированные через параметр --list

Последовательность восстановления таблиц одинаковая с параметром --data-only и без него.

Однако, без параметра --data-only таблицы нормально восстанавливаются.

Значит там как-то включена отложенная проверка ограничений.


А с --data-only последовательность уже начинает играть роль. Таблицы восстанавлюваются, упорядоченные по имени, но часто бывает что таблица, которая для внешнего ключа нужна еще не восстановилсь и тогда ошибка. Если сменить последовательность в ручную - нормально восстанавливается.

Но хотелось бы все-такие как-то включить отложенную проверку ограничений.



Как это возможно сделать?


Ну или как вообще восстановить данные в пустые таблицы, которые уже имеют внешние ключи друг на друга?



Без --data-only сначала создаются таблицы БЕЗ foreign keys/pk/indexes и тд только именно таблицы с полями.
Потом заливаются данные.
А потом уже создаются все ограничения... поэтому и работает.
Никакой отложенной проверки ограничений нет в явном виде.

Так что руками последовательность восстановления таблиц задавать исходя из структуры базы.

>>Как это возможно сделать?
Если FK не обьявленны как DEFERRABLE INITIALLY DEFERRED (а они почти никогда так не объявлены потому что это сильно дорого по ресурсам)
то никак... это вообще не задача pg_dump/restrore - кастомные задачи решаются кастомным же скриптованием.

>>Ну или как вообще восстановить данные в пустые таблицы, которые уже имеют внешние ключи друг на друга?
1)руками в нужной последовательности заливать
или
2)сначала удалить fk мешающие потом залить данные потом создать fk заново
или
3)залить с session_replication_role = replica но тогда они вообще проверяться не будут и можно мусор в базу нарушающий все что можно залить будет




Спасибо за ответы!

А как включить session_replication_role = replica для одной сессии pg_restore?
...
Рейтинг: 0 / 0
Не работает отложенная проверка ключей при восстановлении дампа с параметром --data-only
    #39952222
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
комит
А как включить session_replication_role = replica для одной сессии pg_restore?


Можно в переменной окружения PGOPTIONS задать, или прямо в строке подключения.
На примере psql:
Код: sql
1.
2.
3.
4.
$ psql postgresql://postgres@localhost:5432/postgres?options="-c session_replication_role%3Dreplica" -c 'show session_replication_role'
 session_replication_role 
--------------------------
 replica
...
Рейтинг: 0 / 0
Не работает отложенная проверка ключей при восстановлении дампа с параметром --data-only
    #39952467
комит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Павел Лузанов
комит
А как включить session_replication_role = replica для одной сессии pg_restore?


Можно в переменной окружения PGOPTIONS задать, или прямо в строке подключения.
На примере psql:
Код: sql
1.
2.
3.
4.
$ psql postgresql://postgres@localhost:5432/postgres?options="-c session_replication_role%3Dreplica" -c 'show session_replication_role'
 session_replication_role 
--------------------------
 replica




О, спасибо!



А в pg_restore разве опции можно использовать при вызове?
...
Рейтинг: 0 / 0
Не работает отложенная проверка ключей при восстановлении дампа с параметром --data-only
    #39952619
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
комит
А в pg_restore разве опции можно использовать при вызове?

Всё, что подключается через libpq, включая pg_restore, может использовать задокументированные параметры подключения .
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Не работает отложенная проверка ключей при восстановлении дампа с параметром --data-only
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]