【发布时间】:2020-12-07 18:04:40
【问题描述】:
我已经创建了一个序列,我想在表上的每个 SELECT 查询之后触发它
DROP SEQUENCE IF EXISTS kadry.wyplaty_seq;
CREATE SEQUENCE kadry.wyplaty_seq
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 7771
CACHE 1;
所以我正在尝试创建一个如下所示的函数
CREATE OR REPLACE FUNCTION kadry.inc_trig()
RETURNS TRIGGER AS
$$
BEGIN
SELECT nextval('kadry.wyplaty_seq');
END;
$$
LANGUAGE 'plpgsql' VOLATILE;
最后创建一个触发器
DROP TRIGGER IF EXISTS increment_trigger ON kadry.wyplaty;
CREATE TRIGGER increment_trigger AFTER SELECT
ON kadry.wyplaty
EXECUTE PROCEDURE kadry.inc_trig();
问题出在这一行
CREATE TRIGGER increment_trigger AFTER SELECT
我知道应该是这样的
CREATE TRIGGER increment_trigger AFTER AFTER INSERT OR UPDATE OR DELETE
有人知道在每次 SELECT 查询后我应该怎么做才能触发我的函数吗?
【问题讨论】:
-
您不能在 Select 上触发触发器。请参阅documentation)。
-
您能从业务角度描述一下您想要实现的目标吗?是某种审计吗?
-
@Lukasz Szozda 这只是一个学生练习,不是更大项目的一部分。只是有一个小数据库,我必须测试一些像问题一样的短函数
-
所以答案是,不,你不能使用触发器
-
您可以在this SO question 中找到一个非常相似的问题的答案。
标签: postgresql triggers sequence plpgsql sql-function