powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Отключение ограничений (constraints)
4 сообщений из 4, страница 1 из 1
Отключение ограничений (constraints)
    #40049259
Alexey Agafonov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет

У меня есть скрипты добавления данных в базу. Данные между собой консистентны, то есть соблюдены все связи FK -> PK.

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

Делал

Код: plsql
1.
SET CONSTRAINTS ALL DEFERRED;


Не помогло. Но, когда я на констреинте делаю

Код: plsql
1.
ALTER CONSTRAINT имя_ограничения DEFERRABLE


То работает. Проблема в alter таблицы на уровне всей базы, он недопустим в моем случае. А все констреинты NOT DEFERRABLE. Можно как-то принудительно отключить проверки в сессии, не в базе? И чтобы после выполнения всех инсертов они включались и все проверялось?
...
Рейтинг: 0 / 0
Отключение ограничений (constraints)
    #40049262
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Agafonov
Можно как-то принудительно отключить проверки в сессии, не в базе? И чтобы после выполнения всех инсертов они включались и все проверялось?


Нет.
Вот без "и все проверялось" - возможно как раз на уровне сессии.

У вас есть три варианта решения

1)set session_replication_role to 'replica'; - но тогда в этой сессии fk вообще не будет проверяться
2)глобально в базе раз и на всегда эти проблемные fk объявить deferrable
3)заливать данные в временные таблицы и уже из них запросами переливать в постоянные в нужной последовательности так чтобы не нарушались FK

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Отключение ограничений (constraints)
    #40049264
Alexey Agafonov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk,

заинтересовал первый вариант. Пусть в сессии ничего не будет проверяться, но можно потом вручную запустить эту проверку?
...
Рейтинг: 0 / 0
Отключение ограничений (constraints)
    #40049270
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Agafonov
Maxim Boguk,

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


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

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Отключение ограничений (constraints)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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