Каскадный триггер в Postgresql

bdfy1
Дата: 13.07.2004 12:46:32
Есть таблица примерно такого содержания:
CREATE TABLE users (
us_id serial NOT NULL,
.........
us_parent_id integer,
us_level integer
);

ALTER TABLE ONLY users
ADD CONSTRAINT users_us_parent_id_fk FOREIGN KEY (us_parent_id) REFERENCES users(us_id)
ON UPDATE CASCADE ON DELETE CASCADE;

Т е простое дерево пользователей с привязкой по полю us_parent_id ..
Нужно сделать так чтобы автоматом генерилось поле us_level .. ( как в патче к PostgreSQL .. ) при update, insert, etc ...

Была написана функция
CREATE FUNCTION update_user_level () RETURNS "trigger"
AS '
DECLARE tmp INTEGER;
BEGIN
select us_level INTO tmp from users where us_id = NEW.us_parent_id;
NEW.us_level = tmp + 1;
RETURN NEW;
END;
'
LANGUAGE plpgsql;
и "повешена" на триггер BEFORE UPDATE OR INSERT ...
При апдейте или insert она работает - т е при изменениие us_parent_id берет поле us_level + 1 и возвр новое значение ..
А как сделать так чтобы поле us_level автоматом генерилось и для подчиненных пользователей, т е для пользователей у которых us_parent_id = NEW.us_id и так далее ??? - т е по всей подветке дерева ?