Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.02.2022, 20:06   #1
polin11
Форумчанин
 
Регистрация: 07.06.2015
Сообщений: 164
По умолчанию Доработать запрос, чтобы не было параллельно выполнения одинаковых запросов

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

Буду благодарен за конкретный пример
polin11 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
мне нужно сделать чтобы можно было добавлять любой сайт но только с http:// или https:// и чтобы без них нельзя было добавлять. ametrin PHP 5 25.01.2022 17:54
Выполнил запрос чтобы подписи ставились и в старых сообщениях, где не было подписи у пользователей Alar О форуме и сайтах клуба 7 20.10.2020 12:19
Заполнить матрицу, чтобы не было одинаковых рядом стоящих чисел ManRed Общие вопросы C/C++ 0 05.04.2013 20:13
Доработать протокол отправки SMS-сообщений таким образом, чтобы удалять можно было только разрешенные для удаления сообщения. Разр Skullet C/C++ Сетевое программирование 0 13.12.2012 02:33
Работа с массивами: Заполнить клетки матрицы цифрами так, чтобы в любой строке/столбце не было одинаковых цифр (Visual Basic) вася радугов Помощь студентам 2 18.10.2012 12:22