Почему мой Postgres DELETE удаляет ноль строк, если они существуют? - PullRequest
0 голосов
/ 05 марта 2019

У меня есть таблица transaction_metadata со строкой с первичным ключом: ac98435e-3eb3-11e9-8a32-4713408df551, которая отображается в операторе SELECT.

В транзакции ее удаление (DELETE FROM transaction_metadata WHERE id = 'ac98435e-3eb3-11e9-8a32-4713408df551') говорит о том, что она удаляет 0 строк.Позже в транзакции удаление строки, на которую ссылается строка transaction_metadata, завершается неудачно из-за нарушения ограничения внешнего ключа.

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

1 Ответ

0 голосов
/ 05 марта 2019

Оказалось, что проблема в том, что у нас был триггер, когда каждый раз, когда выполнялась операция со строкой transaction_metadata, мы вставляли строку в таблицу transaction_metadata_history, в которой записывалось изменение.Эта таблица имела ограничение внешнего ключа на transaction_metadata, что должно было привести к тому, что DELETE не работал.

В качестве обходного пути мы отключили триггеры для сеанса консоли (SET session_replication_role = replica;), запустили DELETE s, затем включил их снова (SET session_replication_role = DEFAULT;).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...