Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PostgreSQL > Доработать запрос, чтобы не было параллельно выпол


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

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)