PostgreSQL中的函数问题

时间:2014-04-01 08:45:50

标签: postgresql

我有一张名为&#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();

任何指针都会很棒。

1 个答案:

答案 0 :(得分:0)

如果你想在我从函数实现中收集的表上的INSERT上触发此触发器,你应该使用BEFORE INSERT创建触发器而不是更新

BEFORE UPDATE意味着它只在UPDATE语句上触发。

顺便提一下,我和Craig Ringer一起创建这样一个专栏通常不是一个好主意。