Ruby on rails 如何在Rails迁移中创建触发器?
我正在尝试向我的PostgreSQL(V9)db添加一些触发器,我想创建一个Rails迁移(使用V4.2.7)来满足这个目标。所以我用这个内容创建了一个迁移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
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()
^^^^^^^^^