|
Не работает отложенная проверка ключей при восстановлении дампа с параметром --data-only
|
|||
---|---|---|---|
#18+
Коллеги, добрый вечер. Когда восстанавливаю дамп в БД, в которой нет объектов - все нормально. КОгда восстанавливаю дамп, в БД в которой есть пустые таблицы и параметр pg_restore --data-only - появляются ошибки типа ОШИБКА: INSERT или UPDATE в таблице "employ" нарушает ограничение внешнего ключа "hgjhg86cb" Ключ (id)=(101) отсутствует в таблице "template". Т.е. получается что таблица template еще не залилась, а employ пытается залиться и не проходит проверку. Подскажите, как сделать отложенную проверку внешних ключей в pg_restore с параметром --data-only ? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2020, 18:32 |
|
Не работает отложенная проверка ключей при восстановлении дампа с параметром --data-only
|
|||
---|---|---|---|
#18+
по идее ведь надо только session_replication_role поменять в сессии. но как? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2020, 18:33 |
|
Не работает отложенная проверка ключей при восстановлении дампа с параметром --data-only
|
|||
---|---|---|---|
#18+
Смотрю файлы, сформированные через параметр --list Последовательность восстановления таблиц одинаковая с параметром --data-only и без него. Однако, без параметра --data-only таблицы нормально восстанавливаются. Значит там как-то включена отложенная проверка ограничений. А с --data-only последовательность уже начинает играть роль. Таблицы восстанавлюваются, упорядоченные по имени, но часто бывает что таблица, которая для внешнего ключа нужна еще не восстановилсь и тогда ошибка. Если сменить последовательность в ручную - нормально восстанавливается. Но хотелось бы все-такие как-то включить отложенную проверку ограничений. Как это возможно сделать? Ну или как вообще восстановить данные в пустые таблицы, которые уже имеют внешние ключи друг на друга? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2020, 23:10 |
|
Не работает отложенная проверка ключей при восстановлении дампа с параметром --data-only
|
|||
---|---|---|---|
#18+
комит Смотрю файлы, сформированные через параметр --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 но тогда они вообще проверяться не будут и можно мусор в базу нарушающий все что можно залить будет ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2020, 02:35 |
|
Не работает отложенная проверка ключей при восстановлении дампа с параметром --data-only
|
|||
---|---|---|---|
#18+
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? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2020, 08:07 |
|
Не работает отложенная проверка ключей при восстановлении дампа с параметром --data-only
|
|||
---|---|---|---|
#18+
комит А как включить session_replication_role = replica для одной сессии pg_restore? Можно в переменной окружения PGOPTIONS задать, или прямо в строке подключения. На примере psql: Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2020, 09:22 |
|
Не работает отложенная проверка ключей при восстановлении дампа с параметром --data-only
|
|||
---|---|---|---|
#18+
Павел Лузанов комит А как включить session_replication_role = replica для одной сессии pg_restore? Можно в переменной окружения PGOPTIONS задать, или прямо в строке подключения. На примере psql: Код: sql 1. 2. 3. 4.
О, спасибо! А в pg_restore разве опции можно использовать при вызове? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2020, 18:17 |
|
Не работает отложенная проверка ключей при восстановлении дампа с параметром --data-only
|
|||
---|---|---|---|
#18+
комит А в pg_restore разве опции можно использовать при вызове? Всё, что подключается через libpq, включая pg_restore, может использовать задокументированные параметры подключения . ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2020, 22:02 |
|
|
start [/forum/topic.php?fid=53&msg=39952185&tid=1994702]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
others: | 286ms |
total: | 414ms |
0 / 0 |