У меня проблема с транзакциями в моем приложении.
Моя первая транзакция:
BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SELECT * FROM public.owner WHERE id = 15;
UPDATE public.owner SET current_cat = 2 WHERE id = 15;
COMMIT;
Моя вторая транзакция:
BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SELECT * FROM public.owner WHERE id = 16;
UPDATE public.owner SET current_cat = 4 WHERE id = 16;
COMMIT;
Примерный пример моих таблиц:
CREATE TABLE assortment.cat (
id int not null,
name varchar not null
);
CREATE TABLE assortment.owner (
id int not null,
fio varchar not null,
current_cat int not null
);
Владельцы могут поменяться кошками :) Итак, если начинать две транзакции шаг за шагом (начало первой транзакции -> начало второй транзакции -> выбор первой транзакции -> выбор второй транзакции и т.д. c.) Затем завершение первой транзакции прошло успешно, но вторая транзакция не удалась:
не удалось сериализовать доступ из-за зависимостей между операциями чтения / записи. Код причины: Отменено при идентификации как сводной, во время попытки фиксации
Две транзакции изменили разные строки, почему происходит блокировка? Я ожидаю, что обе транзакции будут успешно завершены.
Я буду рад любой помощи! :)
PS Я использую PostgreSQL