Самая легкая блокировка для эксклюзивных вставок в PostgreSQL

Я хочу ограничить INSERT любой транзакцией, которая получает блокировку (с остальными ожидающими в очереди, а не с ошибкой), разрешая одновременное чтение, обновление и удаление (но, очевидно, не вставляемых данных, что в любом случае невозможно в PG).

Какой самый легкий ЗАМОК для достижения этой цели?


person IamIC    schedule 27.06.2017    source источник
comment
Насколько я знаю, это невозможно, блокировка, которая предотвращает вставки, также предотвращает обновления и удаления. Может быть, если вы объясните, зачем вам это нужно, кто-то может предложить другое решение.   -  person Eelke    schedule 27.06.2017
comment
Я полагал. Я предполагаю, что SHARE ROW EXCLUSIVE — мой лучший выбор?   -  person IamIC    schedule 27.06.2017
comment
Вам не нужно ничего делать. Просто вставьте нужные данные — любая другая транзакция, пытающаяся вставить те же значения первичного ключа, будет ожидать автоматически. выборки, обновления и удаления в этой таблице будут по-прежнему работать.   -  person a_horse_with_no_name    schedule 27.06.2017
comment
Я вручную манипулирую начальным номером в последовательности с каждой транзакцией. У меня есть конкретная разумная причина для этого   -  person IamIC    schedule 27.06.2017


Ответы (1)


Да, если вы хотите заблокировать таблицу от всех одновременных изменений, SHARE ROW EXCLUSIVE — самая дешевая блокировка.

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

person Laurenz Albe    schedule 27.06.2017