Страница 1 из 1

PostgreSQL триггер на UPDATE

Добавлено: 2010-08-17 16:53:26
armadex
есть 2 таблицы,

Код: Выделить всё

CREATE TABLE actions (
    username character varying(64) DEFAULT ''::character varying NOT NULL,
    uid bigint DEFAULT 0::bigint NOT NULL,
    in_bytes bigint DEFAULT 0::bigint NOT NULL,
    out_bytes bigint DEFAULT 0::bigint NOT NULL
);

CREATE TABLE graph_data (
    graph_id bigserial NOT NULL,
    id_user bigint DEFAULT 0::bigint NOT NULL,
    new_in_bytes bigint DEFAULT 0::bigint NOT NULL,
    new_out_bytes bigint DEFAULT 0::bigint NOT NULL
);
в таблице actions каждые 5 минут обновляются значения in_bytes, out_bytes, помогите создать триггер который при обновлении полей in_bytes, out_bytes, будет вставлять в таблицу graph_data в колонки new_in_bytes, new_out_bytes значения НОВЫЙ.in_bytes - СТАРЫЙ.in_bytes, и так же для out_bytes!

Получилось нечто вроде

Код: Выделить всё

CREATE OR REPLACE FUNCTION OnActionsUpdate() RETURNS TRIGGER AS $$
BEGIN
    IF NEW.in_bytes!=OLD.in_bytes or NEW.out_bytes!=OLD.out_bytes THEN
        INSERT INTO graph_data(id_user,new_in_bytes,new_out_bytes) VALUES(NEW.uid, NEW.in_bytes-OLD.in_bytes, NEW.out_bytes-OLD.out_bytes);
    END IF;
    RETURN NULL;
END;$$ LANGUAGE plpgsql SECURITY DEFINER;

CREATE TRIGGER trigger_OnActionsUpdate AFTER UPDATE ON actions FOR EACH ROW EXECUTE PROCEDURE OnActionsUpdate();
но после апдейта таблицы actions в graph_data все равно ничего не INSERTится, в какую сторону копать?

Re: PostgreSQL триггер на UPDATE

Добавлено: 2010-09-24 12:14:34
armadex
короче кому интересно, тоже самое можно сделать с помощью RULE

Код: Выделить всё

CREATE RULE "_RETURN" AS
    ON UPDATE TO actions DO INSTEAD 
    INSERT INTO graph_data (id_user, new_in_bytes, new_out_bytes) VALUES(OLD.uid, NEW.in_bytes-OLD.in_bytes, NEW.out_bytes-OLD.out_bytes);

Re: PostgreSQL триггер на UPDATE

Добавлено: 2010-09-24 12:22:17
armadex
тупонул, вместо INSTEAD, ALSO

Re: PostgreSQL триггер на UPDATE

Добавлено: 2010-09-24 13:15:20
Charlz_Klug_
Не прошло и полгода)) Но, лучше поздно, чем никогда.

Re: PostgreSQL триггер на UPDATE

Добавлено: 2010-09-24 14:42:00
armadex
а где же вы такой умный, были пол года назад? ))))