zea*_*gan 3 postgresql triggers ruby-on-rails plpgsql
我试图在我的rails应用程序中使用PostgreSQL触发器.所以我尝试使用这种迁移,其中触发器的执行很容易:
-- class AddTriggersToProducts < ActiveRecord::Migration
def self.up
table :products
execute %q{
create trigger trig1 before insert on products for each row
begin
price = price + 5
end;
}
end
def self.down
execute 'DROP TRIGGER trig1'
end
end
Run Code Online (Sandbox Code Playgroud)
但这并没有改变任何事情.如果我要在这里使用一个,我不知道在哪里写程序或功能......
"创建触发器 "包含PostgreSQL中的两个步骤:
1.)创建一个触发函数 - 具有特殊的返回值trigger:
CREATE FUNCTION trg_update_prod_price()
RETURNS trigger AS
$func$
BEGIN
NEW.price := NEW.price + 5;
RETURN NEW;
END
$func$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)
多个触发器可以使用相同的触发器功能.
2.)使用现有触发器功能创建触发器:
CREATE TRIGGER update_prod_price
BEFORE INSERT ON products
FOR EACH ROW EXECUTE PROCEDURE trg_update_prod_price();
Run Code Online (Sandbox Code Playgroud)
要"放下触发器"(意味着触发器功能),您必须先使用某个触发器功能丢弃所有触发器,然后再放下触发器功能.
DROP TRIGGER update_prod_price ON products;
DROP FUNCTION trg_update_prod_price();
Run Code Online (Sandbox Code Playgroud)
如果删除表,则会删除所有连接的触发器.无需单独删除它们.