Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Не работает отложенная проверка ключей при восстановлении дампа с параметром --data-only / 8 сообщений из 8, страница 1 из 1
27.04.2020, 18:32
    #39952053
комит
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает отложенная проверка ключей при восстановлении дампа с параметром --data-only
Коллеги, добрый вечер.


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

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

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



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



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

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

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

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

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


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

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



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


Ну или как вообще восстановить данные в пустые таблицы, которые уже имеют внешние ключи друг на друга?
...
Рейтинг: 0 / 0
28.04.2020, 02:35
    #39952185
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает отложенная проверка ключей при восстановлении дампа с параметром --data-only
комит
Смотрю файлы, сформированные через параметр --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
28.04.2020, 08:07
    #39952203
комит
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает отложенная проверка ключей при восстановлении дампа с параметром --data-only
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
28.04.2020, 09:22
    #39952222
Павел Лузанов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает отложенная проверка ключей при восстановлении дампа с параметром --data-only
комит
А как включить 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
28.04.2020, 18:17
    #39952467
комит
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает отложенная проверка ключей при восстановлении дампа с параметром --data-only
Павел Лузанов
комит
А как включить 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
28.04.2020, 22:02
    #39952619
Павел Лузанов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает отложенная проверка ключей при восстановлении дампа с параметром --data-only
комит
А в pg_restore разве опции можно использовать при вызове?

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


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