如何解决返回的行结构与触发table的结构不匹配?

How to solve returned row structure does not match the structure of the triggering table?

我已经将 varchar 数据类型长度的事务 table 列从 50 更改为 100。一旦我更改了列的长度.. 来自父 table 的触发器开始失败.. 一旦我放弃并创建触发器,从主 table 功能中删除一切正常。.不确定是什么问题..有什么理由吗?

Detail: Returned type character varying(50) does not match expected type character varying(100) in column 15.

CREATE FUNCTION customer_delete_master()
    RETURNS trigger
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE NOT LEAKPROOF 
     AS $BODY$

DECLARE
    r customer%rowtype;
BEGIN
    DELETE FROM ONLY customer where customer_id = new.customer_id returning * into r;
    RETURN r;
end;

$BODY$;

更新 1:

CREATE TABLE customer
(
    customer_id character varying(10),
    firstname character varying(100),
    lastname character varying(50),
    CONSTRAINT customer_pkey PRIMARY KEY (customer_id)
);

CREATE TRIGGER after_insert_customer_trigger
    AFTER INSERT
    ON customer
    FOR EACH ROW
    EXECUTE PROCEDURE customer_delete_master();

任何时候 table 具有触发器和视图等依赖对象的更改,都应重新编译依赖对象。这是因为数据库引擎直接从缓存中访问依赖对象的定义。 例如,在触发器的情况下,可以在更改父 table 之前和之后禁用和启用它们。或者您可以再次执行 alter trigger。

禁用:

ALTER TABLE mytable DISABLE TRIGGER mytrigger;

启用:

ALTER TABLE mytable ENABLE TRIGGER mytrigger;