LINUX.ORG.RU

Доработать запрос, чтобы не было параллельно выполнения одинаковых запросов

 ,


0

1

Использую 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 этими же аккаунтам выполняется другой запрос, если выполняется, тогда текущий запрос не выполнять, как это можно сделать?

Буду благодарен за конкретный пример

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.