我在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
请告诉我哪里出错了。
答案 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;时间戳无效
由于此触发器,您无法插入正确的值。我建议在应用程序中更正它并插入适当的值。