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

Sql 如何解决返回的行结构与触发表的结构不匹配?,sql,postgresql,database-trigger,Sql,Postgresql,Database Trigger,我已经将varchar数据类型的事务表列的长度从50改为100。有一次我改变了柱子的长度。。父表的触发器开始失败。。一旦我删除并创建了触发器,从主表函数中删除,一切都正常。。不确定是什么问题。。有什么理由吗 Detail: Returned type character varying(50) does not match expected type character varying(100) in column 15. CREATE FUNCTION customer_delete_mas

我已经将varchar数据类型的事务表列的长度从50改为100。有一次我改变了柱子的长度。。父表的触发器开始失败。。一旦我删除并创建了触发器,从主表函数中删除,一切都正常。。不确定是什么问题。。有什么理由吗

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

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

禁用:

ALTER TABLE mytable DISABLE TRIGGER mytrigger;
启用:

ALTER TABLE mytable ENABLE TRIGGER mytrigger;

如果您也发布了表的DDL,这将有助于理解这一点。包括
CREATE TRIGGER
语句。@stickybit我已经更新了详细信息。我尝试禁用和启用了。。但这并没有帮助。。。但是删除和创建触发器和过程(函数)都有效。是的,关键是应该重新编译依赖对象。通过删除和创建,触发器的定义被更新,数据库引擎缓存被覆盖。最好有一个过程来确定最关键表的任何依赖对象。这里有个好主意