0
我有一個Web應用程序,在重要表中有一個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
,但是如果在插入/更新語句中填充字段(即使爲NULL),也沒有任何結果。我怎樣才能做到這一點?
定義觸發爲'更新或insert'之前。 [在這裏看到一個工作示例。](http://rextester.com/GTROVA13573) – klin
你能否做出答案?非常感謝! –