Взломать "замок" с помощью Postgres и GO

Я новичок в Postgres, так что это может быть очевидно (или очень сложно, я не уверен).

Я хотел бы заставить таблицу или строку быть "заблокированными" как минимум на несколько секунд за раз. Что заставит вторую операцию "ждать".

Я использую golang с github.com/lib/pq для взаимодействия с базой данных.

Мне это нужно потому, что я работаю над проектом, который отслеживает postgresql. Спасибо за любую помощь.

1 ответ

Вы также можете использовать select... для обновления, чтобы заблокировать строку или строки для длины транзакции.

По сути, это как:

begin;
select * from foo where quatloos = 100 for update;
update foo set feens = feens + 1 where quatloos = 100;
commit;

Это выполнит эксклюзивную блокировку на уровне строк для строк таблицы foo, где quatloos = 100. Любая другая транзакция, пытающаяся получить доступ к этим строкам, будет заблокирована до тех пор, пока не будет выполнена фиксация или откат после выполнения операции выбора для обновления.

В идеале эти замки должны жить как можно короче.

См.: https://www.postgresql.org/docs/current/static/explicit-locking.html

Другие вопросы по тегам