Genix пишет:
> Приветствую!
>
> Подскажите пожалуйста, как правильнее создать триггер, который
> обновляет некоторые поля обновленной или вставленной записи?
>
> т.е., например, в таблице, должно быть поле birth_year =
> YEAR(birth_date), и при вставки/обновлении записи в таблице, это
> значение должно заполняться.
>
я бы сделал вот так
CREATE TABLE persons
(
name varchar,
birth_date date,
name_upper varchar,
birth_year int4
) ;
CREATE FUNCTION check_person_trigger_function() RETURNS "trigger" AS '
begin
if new.name is not null then
new.name_upper := upper(new.name);
end if;
if new.birth_date is not null then
new.birth_year := extract(year from new.birth_date);
end if;
return new;
end;
' LANGUAGE 'plpgsql' VOLATILE;
CREATE TRIGGER check_persons_trigger BEFORE INSERT OR UPDATE
ON persons FOR EACH ROW
EXECUTE PROCEDURE public.check_person_trigger_function();
insert into persons (name, birth_date) values ('Юра', '10.10.1970');
select * from persons;
update persons set name = 'Юрий', birth_date = '10.10.1971';
select * from persons;