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;
我正在尝试创建一个带有触发器的函数,当从 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;