我正在研究postgres,我会知道是否有一种简单的方法可以执行内部触发调用查询而无需在触发器内再次写入。我自己解释一下。 我在表上有一个INSERT查询,在执行BEFORE INSERT时有一个触发器。如果条件被验证,那么我将执行查询而不在触发器内重写它(使用NEW变量)。
答案 0 :(得分:1)
如果我理解你的问题,请尝试:
IF (condition) THEN
RETURN new;
ELSE
-- statements
END IF;
的Osvaldo
答案 1 :(得分:0)
这取决于你有什么查询,但你可以使用一个函数并在其中写下你的查询:
create table test (number int);
CREATE OR REPLACE FUNCTION fn_test_insert("number" integer)
RETURNS void AS
$BODY$
insert into test (number) -- this is your insert query
select $1
$BODY$
LANGUAGE sql;
CREATE OR REPLACE FUNCTION tr_fn_test_insert()
RETURNS trigger AS
$BODY$
begin
perform fn_test_insert(new.number + 1); -- calling your insert query with new + 1
return new; -- as example
end
$BODY$
LANGUAGE plpgsql;
CREATE TRIGGER tr_test_insert
AFTER INSERT
ON test
FOR EACH ROW
WHEN ((new.number < 10))
EXECUTE PROCEDURE tr_fn_test_insert();
select fn_test_insert(1);