我想在我的PostgreSQL
数据库中创建我的第一个触发器,但我得到了一个syntax error
。
触发应该能够删除token_jwt_usertoken
表的每一行,其中date_information
比now() - interval '2 month'
逊色。换句话说,如果该行是由至少2个月到期,该行应删除。
这是我的命令:
CREATE FUNCTION after_update_token() RETURNS TRIGGER AS $after_update_token$
BEGIN
IF old.date_information < now() - INTERVAL '2 month'
THEN
DELETE FROM token_jwt_usertoken WHERE old.date_information < now() - INTERVAL '2 month';
END IF;
END;
$after_update_token$ LANGUAGE plpgsql;
CREATE TRIGGER after_update_token AFTER UPDATE ON token_jwt_usertoken FOR EACH ROW EXECUTE FUNCTION after_update_token();
我得到:
[2019年2月7日17时14分01秒] [42601] ERROR:语法错误处或附近 “FUNCTION”[2019年2月7日17时14分01秒的位置:92
然后,我不知道如果我的请求被精心写在我的触发。
谢谢 !
好像你要声明一个函数,并呼吁像他们说:
CREATE [ CONSTRAINT ] TRIGGER name { BEFORE | AFTER | INSTEAD OF } { event [ OR ... ] }
ON table
[ FROM referenced_table_name ]
[ NOT DEFERRABLE | [ DEFERRABLE ] { INITIALLY IMMEDIATE | INITIALLY DEFERRED } ]
[ FOR [ EACH ] { ROW | STATEMENT } ]
[ WHEN ( condition ) ]
EXECUTE PROCEDURE function_name ( arguments )
where event can be one of:
INSERT
UPDATE [ OF column_name [, ... ] ]
DELETE
TRUNCATE
据@lau的答案,这是解决我的问题的代码:
CREATE FUNCTION after_update_token() RETURNS TRIGGER AS $after_update_token$
BEGIN
IF to_timestamp(old.date_information, 'YYYY/MM/DD') < now() - INTERVAL '2 month'
THEN
DELETE FROM token_jwt_usertoken WHERE to_timestamp(old.date_information, 'YYYY/MM/DD') < now() - INTERVAL '2 months';
END IF;
END;
$after_update_token$ LANGUAGE plpgsql;
CREATE TRIGGER after_update_token AFTER UPDATE ON token_jwt_usertoken FOR EACH ROW EXECUTE PROCEDURE after_update_token();
我不得不写:FOR EACH ROW EXECUTE PROCEDURE
代替FOR EACH ROW EXECUTE FUNCTION