删除触发器中的行(PostgreSQL)

删除触发器中的行(PostgreSQL),postgresql,triggers,plpgsql,Postgresql,Triggers,Plpgsql,我在更新时有一个触发器,它应该删除OLD*行,但我不知道表的结构。 所以我尝试使用信息模式来获取列名,但速度非常慢 是否可以在不了解表结构的情况下执行删除 UPD: 触发器应该接受任何表的行,所以触发器函数在被调用之前不能知道关于该表的任何信息 UPD2: 这对我来说很有效: EXECUTE 'DELETE FROM ' || tablename || ' WHERE ctid=$1' USING OLD.ctid; 你为什么需要这个?更新实际上是插入新版本和删除旧版本的记录。此触发器不需要进

我在更新时有一个触发器,它应该删除OLD*行,但我不知道表的结构。 所以我尝试使用信息模式来获取列名,但速度非常慢

是否可以在不了解表结构的情况下执行删除

UPD: 触发器应该接受任何表的行,所以触发器函数在被调用之前不能知道关于该表的任何信息

UPD2:
这对我来说很有效:

EXECUTE 'DELETE FROM ' || tablename || ' WHERE ctid=$1' USING OLD.ctid;

你为什么需要这个?更新实际上是插入新版本和删除旧版本的记录。此触发器不需要进行额外的删除,触发器将永远找不到记录,因为记录已丢失。此触发器是更新触发器,因此不会进行删除。但真正的问题是:为什么应用程序在想要删除行时不使用DELETE是的,它是一个更新触发器,但它想要删除更新记录的旧版本,请检查ctid。