INSERT TRIGGER无法在Postgres中触发

时间:2018-08-15 20:36:25

标签: postgresql triggers insert

我有一个站点,该站点执行查询以将记录添加到历史记录/审计表中。要存储的数据包括一个可能超过255个字符的文本块,但是new_valueold_value的历史表字段是字符变化的(255)。当先前的值超出此限制时,我得到一个值太长的错误。为了避免该错误,我创建了一个函数:

BEGIN
    IF char_length(NEW.old_value) > 240 THEN
        NEW.old_value := substring(NEW.old_value from 0 for 240) || '...';
    END IF;
    IF char_length(NEW.new_value) > 240 THEN
        NEW.new_value := substring(NEW.new_value from 0 for 240) || '...';
    END IF;
    RETURN NEW;
END

触发器如下:

CREATE TRIGGER check_history_update
BEFORE INSERT ON my_table
FOR EACH ROW
EXECUTE PROCEDURE truncate_old_value()

由于我将触发器设置为在INSERT之前发生,所以我希望可以在尝试INSERT之前截断数据,但是仍然会引发错误。是否可以在插入之前捕获和修改像这样的坏数据?如果是这样,定义我的函数和触发器的最佳方法是什么?

注意:我在函数中使用了240,而不是255,这给了我一点安全性。

1 个答案:

答案 0 :(得分:0)

在调用触发器之前 检查数据长度。

将数据类型更改为text,以免受到任意限制255的限制。触发器将始终保证长度限制。