Доступ к строке, с которой запускается триггер - PullRequest
1 голос
/ 11 апреля 2011

Я знаю, что есть способы доступа к типу запроса, именам таблиц, oids и т. Д. В определениях триггеров:

http://www.postgresql.org/docs/8.3/static/plpgsql-trigger.html

В любом случае, есть ли шанс, что я выполнюОБНОВЛЕНИЕ строки, которая запустила триггер без необходимости помечать каждую строку в таблице уникальным идентификатором?

например, если у меня есть таблица для хранения журналов, мне не нужен здесь уникальный идентификатор ...и с течением времени на самом деле могут появиться некоторые строки, которые будут равны.

CREATE TABLE users_log
(
  uid bigint NOT NULL,
  event smallint NOT NULL,
  source character varying,
  event_time timestamp with time zone
)

Я знаю, что из-за точности микросекунд в типе данных «временная метка с часовым поясом» эта ситуация почти равна невозможно, но не совсем невозможно ...

Так как мне написать запрос в триггере, чтобы иметь возможность ОБНОВИТЬ только вставленную строку?

$BODY$BEGIN
    UPDATE "users_log" SET "event_time" = now(); -- this updates all rows

    -- WHERE "id" = NEW.id; - this is what i don't want

    RETURN NEW;
END;$BODY$

1 Ответ

2 голосов
/ 11 апреля 2011

Вы просто используете в своем триггере:

$BODY$BEGIN
    NEW.event_time = now();
    RETURN NEW;
END;$BODY$

И это просто работает & mdash; нет необходимости в дополнительном обновлении. Вы должны объявить этот триггер ПЕРЕД ТРИГГЕРОМ

...