Ответ
В Go при использовании SELECT FOR UPDATE с database/sql и драйверами вроде pgx или pq для PostgreSQL, доступны такие опции:
- NOWAIT – если запись заблокирована, сразу возвращает ошибку вместо ожидания:
SELECT * FROM table WHERE id = 1 FOR UPDATE NOWAIT
- SKIP LOCKED – пропускает заблокированные строки:
SELECT * FROM table WHERE id = 1 FOR UPDATE SKIP LOCKED
- OF column(s) – уточняет, какие именно столбцы блокировать:
SELECT * FROM table WHERE id = 1 FOR UPDATE OF column1, column2
- FOR NO KEY UPDATE – более слабая блокировка, не затрагивающая индексы:
SELECT * FROM table WHERE id = 1 FOR NO KEY UPDATE
В Go пример с pgx:
row := conn.QueryRow(ctx, "SELECT * FROM orders WHERE id = $1 FOR UPDATE NOWAIT", orderID)