我有一张名为&#39; subject_101&#39;目前它有三列,&#39; id&#39; ,其中有一个序列,&#39; date_created&#39; ,其中包含& #39;现在设定DEFAULT()&#39;应用于它,最后是一个名为&#39; reference&#39; 的列。我已经成功创建了一个更新语句,该语句使用了&#39; 和&#39; date_created&#39; 字段; < / p>
UPDATE test.subject_101 set reference = id || '/' || (EXTRACT(YEAR FROM date_created));
这会产生预期的结果。例如 4/2014
我想要更聪明一点并将其创建为功能/触发器,但我遇到了以下代码的问题。似乎发生的情况是,当我插入新记录时,我的&#39;引用&#39; 列保持为NULL。
CREATE OR REPLACE FUNCTION reference_number()
RETURNS TRIGGER AS $$
BEGIN
IF (TG_OP = 'INSERT') THEN
NEW.reference = id || '/' || (EXTRACT(YEAR FROM date_created));
END IF;
RETURN NEW;
END;
$$ language 'plpgsql'
CREATE TRIGGER create_reference_number BEFORE UPDATE ON test.subject_101
FOR EACH ROW EXECUTE PROCEDURE reference_number();
任何指针都会很棒。
答案 0 :(得分:0)
如果你想在我从函数实现中收集的表上的INSERT上触发此触发器,你应该使用BEFORE INSERT创建触发器而不是更新
BEFORE UPDATE意味着它只在UPDATE语句上触发。
顺便提一下,我和Craig Ringer一起创建这样一个专栏通常不是一个好主意。