У меня есть случай, когда мне нужно проверить, существует ли строка, и существует ли она, чтобы не создавать ее снова.Примерно так:
select id from table where constraintA=$1 and constraintB=$2
, следующий сразу после этого в моем коде:
if not exist
insert into table values ($1,$2, {other data})
Чтобы убедиться, что ограничение корректно, я могу создать уникальный индекс, такой как unique(constraintA,constraintB)
,
Но в https://www.postgresql.org/docs/10/transaction-iso.html говорится, что Postgres использует блокировки строк, а вновь созданные данные изолированы от других одновременных транзакций.Таким образом, они не будут блокировать друг друга, так как я не обновляю и не удаляю данные.
Что приводит меня к моему вопросу, нужен ли уровень изоляции выше read committed
, чтобы гарантировать правильность?если нет, верно ли мое понимание?
PS: я использую Postgres 10.5