jpa 我应该如何传递一个userId(或其他参数)到PSQL触发器后删除?

lb3vh1jj  于 2022-11-14  发布在  其他
关注(0)|答案(2)|浏览(82)

我想传递一个参数到一个触发器函数,它调用我的数据库中实体记录的AFTER DELETE。有没有办法在应用程序级别上做到这一点?有没有一个使用“SET”操作的解决方案?或者也许我可以添加一个参数到同一个事务,它用于删除操作?

xoshrz7s

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;
jm81lzqq

jm81lzqq2#

我找到了另一个解决这个问题的方法。我的方法如下:
我在删除查询中传递用户名,如下所示:

DELETE FROM products_images
WHERE id = #{id}
OR (SELECT false WHERE 'xusername' = '${xusername}')

然后在触发器级别,使用以下命令提取username值:
第一次
请注意,为了使其正常工作,您必须将用户名作为值而不是参数传递。
还要注意,我只在直接删除查询中测试过,还没有在级联中测试过。

相关问题