PostgreSQL-Update last_update_date 到当前 if modif at table

PostgreSQL-Update last_update_date to current if modif at table

我正在尝试创建一个带有触发器的函数,当从 table tb_customer 修改字段时,属性 last_update_date 应该更新为 current_date的修改。 如果用户试图在属性 last_update_date 中输入一个值,则应通过消息引发错误,并且不允许此插入。

创建的table代码是:

 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();

当不允许用户更新列时,您应该撤销他这样做。你不需要触发器。

测试代码是您可以自己完成的事情。但我已经可以告诉您,UDAPTE 不是 TG_OP.

的有效值

可以在 manual.

中找到完整的触发器示例

需要将其创建为函数,而不是过程。还有其他问题,但我不知道哪些是真实的,哪些是你重新输入时引入的。

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;