PostgreSQL-Update last_update_date到当前if修改表



我试图创建一个函数,当修改表tb_customer的字段时,属性last_update_date应更新为修改的current_date。如果用户试图在last_update_date属性中输入一个值,则会抛出一个错误消息,并且不允许此插入。

创建表的代码为:

CREATE TABLE erp.tb_customer    (
cust_no          CHARACTER(5) NOT NULL,
cust_name        CHARACTER VARYING(50) NOT NULL,
cust_cif         CHARACTER VARYING(150) NOT NULL,
last_updated_by  CHARACTER VARYING(20) DEFAULT 'SYSTEM',
last_update_date DATE NOT NULL,
CONSTRAINT pk_customer PRIMARY KEY (cust_no)
);
到目前为止,我有以下代码:
CREATE OR REPLACE FUNCTION modif_update_date_tracker() 
RETURNS trigger AS $$
BEGIN
IF INSERT AT last_update_date THEN
RAISE EXCEPTION 'Not possible to update this field'
END IF;
NEW.last_update_date := current_time;
RETURN NEW;
END;
$$ LANGUAGE plpgsql
------------------------------------------------------------------------------------------------
-- Create trigger 1
------------------------------------------------------------------------------------------------
CREATE TRIGGER trigger_modif_update_date_tracker
BEFORE UPDATE
ON             tb_customer
FOR EACH ROW
EXECUTE PROCEDURE modif_update_date_tracker();
BEGIN
IF OLD.last_update_date!=NEW.last_update_date THEN
RAISE EXCEPTION 'Not possible to update this field';
END IF; 
NEW.last_update_date := CURRENT_TIMESTAMP;
RETURN NEW;
END;

当一个用户不被允许更新一个列时,你应该REVOKE他。你不需要一个触发器。

测试代码是你可以自己做的事情。但是我已经可以告诉你,UDAPTE不是TG_OP的有效值。

一个完整的触发器示例可以在手册中找到。

它需要被创建为一个FUNCTION,而不是一个PROCEDURE。还有其他的问题,但是我不知道哪些是真的,哪些是你在重打的时候引入的。

最新更新