Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Доработать запрос, чтобы не было параллельно выпол 
:(
    Опции темы
polin11
Дата 1.2.2022, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 6.6.2015

Репутация: нет
Всего: нет



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

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

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PostgreSQL | Следующая тема »


 




[ Время генерации скрипта: 0.3476 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.