【发布时间】:2019-04-15 07:23:08
【问题描述】:
是否可以在查询期间设置可由 TRIGGER 过程捕获的变量(仅对相关查询有效)?
比如我想记录一个查询的执行者的ID(current_user总是一样的)。 所以我会做这样的事情:
tbl_executor (
id PRIMARY KEY,
name VARCHAR
);
tbl_log (
executor REFERENCE tbl_executor(id),
op VARCHAR
);
tbl_other ...
CREATE TRIGGER t AFTER INSERT OR UPDATE OR DELETE ON tbl_executor
FOR EACH ROW
EXECUTE PROCEDURE (INSERT INTO tbl_log VALUES( ID_VAR_OF_THIS_QUERY ,TG_OP))
现在,如果我运行如下查询:
INSERT INTO tbl_other
VALUES(.......) - and set ID_VAR_OF_THIS_QUERY='id of executor' -
我得到以下结果:
tbl_log
-----------------------------
id | op |
-----------------------------
'id of executor' | 'INSERT'|
我希望我已经提出了这个想法......而且我认为这几乎不可行......但是有人可以帮助我吗?
【问题讨论】:
-
你可以用
create if not exists/on commit drop创建一个临时表,然后把数据放在那里。 -
或者,您可以拥有一个共享表,其中 PK 是当前的
pg_backend_pid(),并将数据存储在其中。
标签: database postgresql