插入触发器之前的postgreSQL阻塞函数00:00:00

时间:2017-08-13 07:06:07

标签: postgresql triggers insert timestamp

我在PostgreSQL环境中创建了以下触发器,以阻止<​​strong>时间戳数据类型字段中 0000-00-00 00:00:00 的插入,因为它& #39;不受支持。

create function my_trigger_func() returns trigger as $$
begin
    if NEW.t_date = '0000-00-00 00:00:00' then
        NEW.t_date := '0001-01-01 00:00:00';
    end if;
    return new;
end
$$ language plpgsql;

CREATE TRIGGER my_trigger
BEFORE INSERT ON timezone.test
FOR EACH ROW
EXECUTE PROCEDURE my_trigger_func()

成功创建上述触发器功能。但在那之后,当我执行下面的insert命令时:

Insert into timezone.test (t_id,t_date) values ('3','0001-01-01 01:10:01');

我收到以下错误:

ERROR:  date/time field value out of range: "0000-00-00 00:00:00"
LINE 1: SELECT NEW.t_date = '0000-00-00 00:00:00'
                            ^
QUERY:  SELECT NEW.t_date = '0000-00-00 00:00:00'
CONTEXT:  PL/pgSQL function my_trigger_func() line 3 at IF
********** Error **********

ERROR: date/time field value out of range: "0000-00-00 00:00:00"
SQL state: 22008
Context: PL/pgSQL function my_trigger_func() line 3 at IF

请告诉我哪里出错了。

1 个答案:

答案 0 :(得分:2)

  

请告诉我哪里出错了。

很简单,你试着比较:

IF NEW.t_date          = '0000-00-00 00:00:00' THEN
   (type timestamp)      literal -> conversion to Timestamp 

'0000-00-00 00:00:00' - &gt;时间戳无效

由于此触发器,您无法插入正确的值。我建议在应用程序中更正它并插入适当的值。