Использую PGSQL. Есть таблица записей ~ 1000 000 записей
CREATE TABLE forms (
id serial PRIMARY KEY,
account INT NOT NULL,
author text,
salary INT NOT NULL
);
INSERT INTO forms(account, author, salary) VALUES
(1100889, 'Иванов', 30),
(1100889, 'Петров', 40),
(4443, 'Сидоров', 40),
(1100889, 'Сергеев', 50)
При авторизации пользователя в аккаунт идет пересчет поля salary в целом по аккаунту для всех пользователей
UPDATE forms
SET salary = (SELECT....)
WHERE account = 1100889
BEGIN ISOLATION LEVEL READ COMMITTED READ WRITE;
SET LOCAL statement_timeout = '5000ms';
SELECT PG_ADVISORY_XACT_LOCK("lock_id") FROM (
SELECT UNNEST('{1100889}'::BIGINT[]) AS "lock_id"
) LocksId
RESET statement_timeout
UPDATE forms
SET salary = 100
WHERE account = 1100889 AND author = 'Иванов'
Плохо разбираюсь в тебе блокировок в PGSQL, просьба подсказать как исправить ситуацию с точки зрения блокировок, в какую сторону смотреть?
Перемещено hobbit из general