powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / двойной вызов функции на добавление данных
3 сообщений из 3, страница 1 из 1
двойной вызов функции на добавление данных
    #39627403
rassvet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день
суть проблемы:
В конце дня запускается функция, которая рассчитывает статистику по прошедшему дню, и кладет ее в таблицу.
Причем функция удаляет все предыдущие данные статистики за текущий день (что бы избежать дублей)
но! бывает, что вызов этой функции задваивается (вызывается 2 раза почти одновременно), в результате появляются дубли в таблице
и совсем странно то, что могут продублироваться не все записи

схема работы веб клиент-> pgbouncer->postgresql
функция для сбора статистики:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
CREATE OR REPLACE FUNCTION smena.f_finish (
  i_user integer,
  i_org integer,
  i_smena integer,
  out o_err numeric,
  out o_msg varchar
)
RETURNS record AS
$body$
DECLARE
  _count     numeric;
  _pl        record;
BEGIN
...

delete from smena.t_worker_smm where smena=i_smena and action=6 and org=i_org;

  insert into smena.t_worker_smm(smena,worker,action,smm,org)  
  select i_smena,t.id,6, 
(select salary from smena.f_worker_cash(i_smena,t.id,i_org)),i_org
  from spr.t_worker t
  where (select salary from smena.f_worker_cash(i_smena,t.id,i_org))>0
  and t.org=i_org and t.hide=false and t.adr=i_adr;
...



в итоге в таблице могут появиться такие записи:
"id" "smena" "worker" "action" "smm" "org"
"11215463" "98686" "6577" "6" "2544" "741"
"11215787" "98686" "6577" "6" "2544" "741"

Понимаю что есть варианты решения: поправить вызов функции, что бы 2 раза не вызывал, настроить индекс, что бы не создавались дубли, но хотелось бы решить эту проблему на уровне функции, что то можно сделать?
спасибо
...
Рейтинг: 0 / 0
двойной вызов функции на добавление данных
    #39627424
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rassvet,

Посмотрите на рекомендательные блокировки .
...
Рейтинг: 0 / 0
двойной вызов функции на добавление данных
    #39627669
PgSQLanonymous3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / двойной вызов функции на добавление данных
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]