У меня есть веб-приложение с полем modified
в важных таблицах, чтобы иметь возможность отслеживать, когда была произведена какая-либо модификация. (Не говоря уже о ;;
она есть, потому что это Postgres SQL-код выполняется из рамок Scala, который использует ;
в качестве разделителя и ;;
сбегает его)Триггер Postgres, который в любом случае установит значение при модификации?
CREATE TABLE security_permission (
id BIGSERIAL,
value VARCHAR(255) NOT NULL,
modified TIMESTAMP DEFAULT now(),
PRIMARY KEY (id)
);
CREATE OR REPLACE FUNCTION update_modified()
RETURNS TRIGGER AS $$
BEGIN
NEW.modified = now();;
RETURN NEW;;
END;;
$$ language 'plpgsql';
CREATE TRIGGER update_modified_security_permission BEFORE UPDATE ON security_permission FOR EACH ROW EXECUTE PROCEDURE update_modified();
Проблема заключается в том что это работает только если поле не указано в инструкции вставки/обновления. Если поле задано даже с NULL, то измененное не задано. Я не имею полного контроля над сгенерированными операторами, потому что они являются частью структуры ORM, которая их генерирует автоматически, но я все же всегда хочу установить измененное поле. Как я могу это сделать?
Я попытался использовать BEFORE INSERT OR UPDATE ON
и AFTER INSERT OR UPDATE ON
, но ничего не работает, если поле заполнено в инструкции insert/update, даже если NULL. Как я могу это сделать?
Определите триггер 'перед обновлением или insert'. [См. Рабочий пример здесь.] (Http://rextester.com/GTROVA13573) – klin
Можете ли вы ответить на этот вопрос? это отличное спасибо! –