PostgreSQL:触发器调用带参数的函数
PostgreSQL: trigger to call function with parameters
在 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
谁能解释一下为什么我的触发器没有使用现有功能?我应该使用替代设计来实现我的目标吗?我的目标是让多个 table 有一个调用函数 create_rec_if_needed
的触发器,并且在每种情况下,触发器都必须提供记录的 ID 和特定于 table 的字符串。
A trigger procedure is created with the CREATE FUNCTION command,
declaring it as a function with no arguments and a return type of
trigger.
您可以使用通过 TG_ARGV
传递给触发器函数的参数,例如TG_TABLE_NAME
- 导致触发器调用的 table 的名称。 40.9. Trigger Procedures.
在 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
谁能解释一下为什么我的触发器没有使用现有功能?我应该使用替代设计来实现我的目标吗?我的目标是让多个 table 有一个调用函数 create_rec_if_needed
的触发器,并且在每种情况下,触发器都必须提供记录的 ID 和特定于 table 的字符串。
A trigger procedure is created with the CREATE FUNCTION command, declaring it as a function with no arguments and a return type of trigger.
您可以使用通过 TG_ARGV
传递给触发器函数的参数,例如TG_TABLE_NAME
- 导致触发器调用的 table 的名称。 40.9. Trigger Procedures.