我想传递一个参数到一个触发器函数,它调用我的数据库中实体记录的AFTER DELETE。有没有办法在应用程序级别上做到这一点?有没有一个使用“SET”操作的解决方案?或者也许我可以添加一个参数到同一个事务,它用于删除操作?
xoshrz7s1#
你有几个选择。1.可以将application_name环境变量设置为用户名,然后在触发器中检索它。2.可以按列展开表,并在insert/update/delete语句中将用户名发送到数据库。
SET application_name = 'user name'; -- in the trigger: SELECT application_name FROM pg_stat_activity WHERE pid = pg_backend_pid();
或
ALTER TABLE t ADD COLUMN user_name text; -- and in the trigger (depending on context): my_user := NEW.user_name; or my_user := OLD.user_name;
jm81lzqq2#
我找到了另一个解决这个问题的方法。我的方法如下:我在删除查询中传递用户名,如下所示:
DELETE FROM products_images WHERE id = #{id} OR (SELECT false WHERE 'xusername' = '${xusername}')
然后在触发器级别,使用以下命令提取username值:第一次请注意,为了使其正常工作,您必须将用户名作为值而不是参数传递。还要注意,我只在直接删除查询中测试过,还没有在级联中测试过。
2条答案
按热度按时间xoshrz7s1#
你有几个选择。
1.可以将application_name环境变量设置为用户名,然后在触发器中检索它。2.可以按列展开表,并在insert/update/delete语句中将用户名发送到数据库。
或
jm81lzqq2#
我找到了另一个解决这个问题的方法。我的方法如下:
我在删除查询中传递用户名,如下所示:
然后在触发器级别,使用以下命令提取username值:
第一次
请注意,为了使其正常工作,您必须将用户名作为值而不是参数传递。
还要注意,我只在直接删除查询中测试过,还没有在级联中测试过。