Ruby on rails 如何在Rails迁移中创建触发器?

Ruby on rails 如何在Rails迁移中创建触发器?,ruby-on-rails,postgresql,triggers,migration,Ruby On Rails,Postgresql,Triggers,Migration,我正在尝试向我的PostgreSQL(V9)db添加一些触发器,我想创建一个Rails迁移(使用V4.2.7)来满足这个目标。所以我用这个内容创建了一个迁移 class CreateDeleteAddressTriggers < ActiveRecord::Migration def change execute <<-SQL CREATE OR REPLACE FUNCTION remove_address() RETURNS trigger

我正在尝试向我的PostgreSQL(V9)db添加一些触发器,我想创建一个Rails迁移(使用V4.2.7)来满足这个目标。所以我用这个内容创建了一个迁移

class CreateDeleteAddressTriggers < ActiveRecord::Migration
  def change
    execute <<-SQL
      CREATE OR REPLACE FUNCTION remove_address() RETURNS trigger
        LANGUAGE plpgsql AS
        $$BEGIN
          DELETE FROM public.addresses WHERE id = OLD.address_id;
      END;$$;

      CREATE TRIGGER remove_my_object_address
        AFTER DELETE ON public.my_objects FOR EACH ROW
        EXECUTE TRIGGER remove_address()

      CREATE TRIGGER remove_user_address
        AFTER DELETE ON public.users FOR EACH ROW
        EXECUTE TRIGGER remove_address()
    SQL
  end
end
如何更正迁移以正确运行触发器

编辑:根据给出的答案,这是生成的错误

ActiveRecord::StatementInvalid: PG::SyntaxError: ERROR:  syntax error at or near "CREATE"
LINE 11:       CREATE TRIGGER remove_user_address

您在SQL中使用了错误的语法。您需要
执行过程
,而不是
执行触发器

你应该

  CREATE TRIGGER remove_my_object_address
    AFTER DELETE ON public.my_objects FOR EACH ROW
    EXECUTE PROCEDURE remove_address()
            ^^^^^^^^^


来源:.

我将“执行触发器”替换为“执行过程”,但在运行迁移时出现此错误,“PG::SyntaxError:error:syntax error位于或接近“CREATE”,第11行:CREATE TRIGGER remove\u user\u address”@Dave每个语句后面都需要分号。@meagar这种处理函数和触发器迁移的方法并不是在测试环境迁移时执行代码。有什么建议吗?
  CREATE TRIGGER remove_my_object_address
    AFTER DELETE ON public.my_objects FOR EACH ROW
    EXECUTE PROCEDURE remove_address()
            ^^^^^^^^^
 CREATE TRIGGER remove_user_address
    AFTER DELETE ON public.users FOR EACH ROW
    EXECUTE PROCEDURE remove_address()
            ^^^^^^^^^