如何在rails应用程序中使用PostgreSQL触发器?

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)

但这并没有改变任何事情.如果我要在这里使用一个,我不知道在哪里写程序或功能......

Erw*_*ter 6

"创建触发器 "包含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)

如果删除表,则会删除所有连接的触发器.无需单独删除它们.