Size: a a a

DBA - русскоговорящее сообщество

2021 February 20

ДМ

Дмитрий Мачихелян... in DBA - русскоговорящее сообщество
Serega Carbon
и в чем проблема была?
Выше подсказали.
источник

ДМ

Дмитрий Мачихелян... in DBA - русскоговорящее сообщество
Сергей Будрик
1. после 1 ;
2. после new ;
3. если в if не зайдет, какой return будет
.
источник

SC

Serega Carbon in DBA - русскоговорящее сообщество
а, да, правильно
источник

SC

Serega Carbon in DBA - русскоговорящее сообщество
источник

ДМ

Дмитрий Мачихелян... in DBA - русскоговорящее сообщество
Но все равно чет не работает)
источник

ДМ

Дмитрий Мачихелян... in DBA - русскоговорящее сообщество
Я создал триггер на эту функцию
источник

ДМ

Дмитрий Мачихелян... in DBA - русскоговорящее сообщество
create trigger increment_trigger after
update
   on
   public.contacts for each row execute function increment_updated_times()
источник

ДМ

Дмитрий Мачихелян... in DBA - русскоговорящее сообщество
Но при апдейте ничего не происходит
источник

YS

Yaroslav Schekin in DBA - русскоговорящее сообщество
Дмитрий Мачихелян
create trigger increment_trigger after
update
   on
   public.contacts for each row execute function increment_updated_times()
Окончательный текст функции Вы показывали?
И, кстати, есть же https://t.me/pgsql
источник

ДМ

Дмитрий Мачихелян... in DBA - русскоговорящее сообщество
Спасибо
источник

ДМ

Дмитрий Мачихелян... in DBA - русскоговорящее сообщество
CREATE OR REPLACE FUNCTION public.increment_updated_times()
 RETURNS trigger
 LANGUAGE plpgsql
AS $function$
 begin
   if
     old.contact_name <> new.contact_name or
     old.company <> new.company or
     old.contact_group <> new.contact_group or
     old.email <> new.email or
     old.account_name <> new.account_name or
     old.job_title <> new.job_title then
     new.updated_times = old.updated_times+1;
   return new;
   end if;
   raise notice 'Hello world';
   return new;
 END;
$function$
;
источник

ДМ

Дмитрий Мачихелян... in DBA - русскоговорящее сообщество
Правда он почему-то не видит функцию похоже
источник

YS

Yaroslav Schekin in DBA - русскоговорящее сообщество
Дмитрий Мачихелян
CREATE OR REPLACE FUNCTION public.increment_updated_times()
 RETURNS trigger
 LANGUAGE plpgsql
AS $function$
 begin
   if
     old.contact_name <> new.contact_name or
     old.company <> new.company or
     old.contact_group <> new.contact_group or
     old.email <> new.email or
     old.account_name <> new.account_name or
     old.job_title <> new.job_title then
     new.updated_times = old.updated_times+1;
   return new;
   end if;
   raise notice 'Hello world';
   return new;
 END;
$function$
;
Ну и так, как он написан — он и не должен ничего делать.
Это же AFTER trigger, т.е. вызывается после того, как все изменения уже произошли (что там в NEW ни возвращай).
источник

ДМ

Дмитрий Мачихелян... in DBA - русскоговорящее сообщество
Yaroslav Schekin
Ну и так, как он написан — он и не должен ничего делать.
Это же AFTER trigger, т.е. вызывается после того, как все изменения уже произошли (что там в NEW ни возвращай).
Спасибо! Помогло
источник

IZ

Ilia Zviagin in DBA - русскоговорящее сообщество
Дмитрий Мачихелян
А что это такое значит "returns trigger" ?
источник

ДМ

Дмитрий Мачихелян... in DBA - русскоговорящее сообщество
Ilia Zviagin
А что это такое значит "returns trigger" ?
в подробности не вдавался, видимо возвращает триггерную функцию?
источник

ВТ

Виктор Ткаченко... in DBA - русскоговорящее сообщество
Дмитрий Мачихелян
create trigger increment_trigger after
update
   on
   public.contacts for each row execute function increment_updated_times()
Откуда взялся FUNCTION? К триггеру же функция цепляется как PROCEDURE
источник

ДМ

Дмитрий Мачихелян... in DBA - русскоговорящее сообщество
Виктор Ткаченко
Откуда взялся FUNCTION? К триггеру же функция цепляется как PROCEDURE
Сделал по примеру.
Кстати, все работает, мне помогли уже. Все не работало, потому что было AFTER UPDATE
источник

ВТ

Виктор Ткаченко... in DBA - русскоговорящее сообщество
Дмитрий Мачихелян
CREATE OR REPLACE FUNCTION public.increment_updated_times()
 RETURNS trigger
 LANGUAGE plpgsql
AS $function$
 begin
   if
     old.contact_name <> new.contact_name or
     old.company <> new.company or
     old.contact_group <> new.contact_group or
     old.email <> new.email or
     old.account_name <> new.account_name or
     old.job_title <> new.job_title then
     new.updated_times = old.updated_times+1;
   return new;
   end if;
   raise notice 'Hello world';
   return new;
 END;
$function$
;
Если поля могут быть NULL то это тоже стоит учесть при сравнении...
источник

ДМ

Дмитрий Мачихелян... in DBA - русскоговорящее сообщество
Виктор Ткаченко
Если поля могут быть NULL то это тоже стоит учесть при сравнении...
null != null?
источник