считать данные, потом с тем же уровнем открыть вторую транзакцию и считать данные с таким же условием, а потом вставить ещё строку попадающую под это условие и закоммитить до первой, пройдёт ли коммит?
Так проверьте, если вот это https://www.postgresql.org/docs/current/transaction-iso.html как-то непонятно или вы этому как-то не верите.
чекнуть нет возможности но исходя из того что там написано - да, вторая транзакция завершения успешно, а первой при попытке закоммититься выдастся ошибка сериализации я прав или у вас другие данные?
Если первая не пишэт — то что ей помешает.
Не понятно почему 1ая-тр может не завершиться, если она только читает данные
Потому что в некоторых ситуациях (очень редко, впрочем) на serializable PostgreSQL откатывает даже read-only transactions (см. https://wiki.postgresql.org/wiki/SSI#Rollover ).
первая пишет последовательность: tx1: select * from sample where a = 1 tx2: select * where a = 1 from sample tx2: insert into sample(a) values(1) tx1: insert into sample(a) values(1)
А почему это вдруг должно останавливаться Почему ? В чём конфликт этих транзакций?
Если первая пишэт, то тут она уж обязательно должна упасть.
спросонья не то спросил 🤦🏽♂ вот такая последовательность: tx1: select * from sample where a = 1 tx2: select * from sample where a = 1 tx1: insert into sample(a) values(1) tx2: insert into sample(a) values(1) tx2: commit tx1: select * where a = 1 from sample tx1: commit первая упадёт или вторая?
А я уж попробовал и хотел ответ писать. ;( И да, Вы бы хоть SQL писали нормальный, ну что это такое: "select * where a = 1 from sample;"? ;)
Обсуждают сегодня