Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
 фантомный констрэйнт  [new]
sstatistic
Member

Откуда:
Сообщений: 117
Доброй ночи.

Есть таблица1:

t1


Есть таблица2:

t2



У t2 есть внешний ключ

...ADD CONSTRAINT fk_t2 FOREIGN KEY (t1_id) REFERENCES t1(id) ON DELETE CASCADE;
2 фев 21, 23:16    [22273525]     Ответить | Цитировать Сообщить модератору
 Re: фантомный констрэйнт  [new]
sstatistic
Member

Откуда:
Сообщений: 117
При попытке перенести БД с помощью дампа при восстановлении ошибка:

DETAIL:  Ключ (t1_id)=(114565488) отсутствует в таблице "t1".


и констрэйнт не создается.
2 фев 21, 23:17    [22273528]     Ответить | Цитировать Сообщить модератору
 Re: фантомный констрэйнт  [new]
sstatistic
Member

Откуда:
Сообщений: 117
Запросом проверил, действиетельно в рабочей БД Ключ (t1_id)=(114565488) отсутствует в таблице "t1".

при этом в t2 он имеется.


И реиндекс и вакуум фулл таблицы t2 проходят без ошибок.






Как такое может быть?

И как перенести эту БД дампом?
2 фев 21, 23:19    [22273530]     Ответить | Цитировать Сообщить модератору
 Re: фантомный констрэйнт  [new]
Maxim Boguk
Member

Откуда: Melbourne, Австралия
Сообщений: 4571
sstatistic,

автор
И как перенести эту БД дампом?

удалить (t1_id)=(114565488) из t2

автор
Как такое может быть?

есть больше одного метода как от superuser сломать валидность fk ))



--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
2 фев 21, 23:21    [22273531]     Ответить | Цитировать Сообщить модератору
 Re: фантомный констрэйнт  [new]
sstatistic
Member

Откуда:
Сообщений: 117
Maxim Boguk
sstatistic,

автор
И как перенести эту БД дампом?

удалить (t1_id)=(114565488) из t2

автор
Как такое может быть?

есть больше одного метода как от superuser сломать валидность fk ))



--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru




Удалил.

Перенслось.

Спасибо )







Ну а на счет больше одного, на ум только приходит отключение по питанию... а какие еще варианты могут быть?
3 фев 21, 00:29    [22273545]     Ответить | Цитировать Сообщить модератору
 Re: фантомный констрэйнт  [new]
Maxim Boguk
Member

Откуда: Melbourne, Австралия
Сообщений: 4571
sstatistic

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


1)set session_replication_role to replica;
документация
Since foreign keys are implemented as triggers, setting this parameter to replica also disables all foreign key checks, which can leave data in an inconsistent state if improperly used.


2)alter table t2 DISABLE TRIGGER ALL;
документация
One can disable or enable a single trigger specified by name, or all triggers on the table, or only user triggers (this option excludes internally generated constraint triggers such as those that are used to implement foreign key constraints or deferrable uniqueness and exclusion constraints).



--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
3 фев 21, 00:37    [22273547]     Ответить | Цитировать Сообщить модератору
 Re: фантомный констрэйнт  [new]
sstatistic
Member

Откуда:
Сообщений: 117
Maxim Boguk
sstatistic

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


1)set session_replication_role to replica;
документация
Since foreign keys are implemented as triggers, setting this parameter to replica also disables all foreign key checks, which can leave data in an inconsistent state if improperly used.


2)alter table t2 DISABLE TRIGGER ALL;
документация
One can disable or enable a single trigger specified by name, or all triggers on the table, or only user triggers (this option excludes internally generated constraint triggers such as those that are used to implement foreign key constraints or deferrable uniqueness and exclusion constraints).



--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru



Вот это да!!!

Про реплику вообще не мог даже подумать!!!
3 фев 21, 01:01    [22273561]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить