在PostgreSQL中,我正在尝试创建一个将参数传递给函数的触发器,但看起来这个操作会查找其签名为零参数的函数:
ERROR: function create_rec_if_needed() does not exist:
CREATE TRIGGER after_update_winks AFTER UPDATE ON winks
FOR EACH ROW
WHEN (NEW.counter > 3)
EXECUTE PROCEDURE create_rec_if_needed(NEW.id, 'Wink')
当我列出现存的函数时,我可以看到我的2参数函数。这是\df
:
List of functions
Schema | Name | Result data type | Argument data types
--------+-------------------------+---------------------------+-------------------------------------------------
public | create_rec_if_needed | void | rec_id integer, rec_type text
任何人都可以了解为什么我的触发器没有使用现有功能吗?我应该使用另一种设计来实现我的目标吗?我的目标是让多个表具有一个调用函数create_rec_if_needed
的触发器,并且在每种情况下,触发器必须提供记录的id和特定于表的字符串。
答案 0 :(得分:2)
使用CREATE FUNCTION命令创建触发器过程, 将它声明为没有参数和返回类型的函数 触发。
您可以通过TG_ARGV
使用传递给触发器功能的参数,例如TG_TABLE_NAME
- 导致触发器调用的表的名称。 40.9. Trigger Procedures