Использую PostgresSQL
Есть 2 таблицы autors и documents нужно для определенных аккаунтов обновить
информацию в autors по documents.
CREATE TABLE autors (
id serial PRIMARY KEY,
author text,
author_id int not null,
docs int[]
);
insert into autors( author, author_id, docs) values
('Иванов', 3, ARRAY[1,2]),
('Петров', 4, ARRAY[1,2]),
('Сидоров', 6, ARRAY[1,2]),
('Сергеев', 5, ARRAY[1,2]);
CREATE TABLE documents (
id serial PRIMARY KEY,
account int not null,
author_id int not null,
doc_id int
);
insert into documents (account, author_id, doc_id) values
(1, 3, 10),
(1, 4, 24),
(2, 5, 33),
(2, 3, 21);
Запрос:
with au as(
select autors.author_id, array_agg(documents.doc_id) as res
from autors
inner join documents ON (
autors.author_id = documents.author_id
AND documents.account = ANY(ARRAY[1,2])
)
group by autors.author_id
)
update autors
set docs = au.res
from au
where autors.author_id = au.author_id
returning autors .*
Стала возникать проблема если например по аккаунту 1, одновременно
выполняются несколько одинаковых запросов, падает ошибка deadlock detected.
Хочется перед выполнение запроса как-то понимать, что c этими же аккаунтам
выполняется другой запрос, если выполняется, тогда текущий запрос не выполнять,
как это можно сделать?
Буду благодарен за конкретный пример