【问题标题】:Trigger Procedure Not Showing Up In Staging/Production暂存/生产中未出现触发程序
【发布时间】:2017-10-27 19:10:48
【问题描述】:

所以我的 structure.sql 中有这个触发程序:

CREATE FUNCTION dead_filter() RETURNS TRIGGER AS $dead_filter$
    BEGIN
        IF (NEW.all_votes > 6 AND NEW.non_skip_votes/NEW.all_votes::float < 0.56) THEN
            NEW.dead := true;
            RETURN NEW;
        END IF;

    RETURN NEW;
END;
$dead_filter$ LANGUAGE plpgsql;

CREATE TRIGGER dead_filter AFTER UPDATE ON statements 
FOR EACH ROW 
EXECUTE PROCEDURE dead_filter();

它在本地工作得很好,但由于某种原因它出现在我的登台和生产服务器中!

两者都存在于 Heroku 应用程序上,并且都有

config.active_record.schema_format = :sql

在他们的相关配置文件中。我在这里错过了什么?

select * from pg_trigger;

不包括我在登台/生产中的触发器,但在本地,在开发中。

我需要运行什么来重新读取 structure.sql 文件吗?后端绝对是我的弱点,所以如果有什么超级明显的事情我应该知道去做......很可能我不知道去做!

谢谢!

【问题讨论】:

  • 这可能是个愚蠢的问题,但是您是否在实际添加了此触发器的生产数据库上运行了迁移?
  • 愚蠢的问题是我所追求的!事实证明我的无知正在闪耀 - 我的印象是我可以将触发器添加到我的 structure.sql (它与 localhost 一起使用),它会自动神奇地用于暂存和生产......不是案子!我添加了一个迁移,现在可以在 staging 的 pg_trigger 中看到它。如果您想让您的评论成为答案,我很乐意接受!

标签: sql postgresql heroku database-trigger


【解决方案1】:

在评论中,您需要创建一个添加触发器的迁移并在生产中运行此迁移,因为它在 Heroku 上不是自动的。另请注意,structure.sql 文件将在本地运行迁移或rake db:schema:dump 等任务后重新生成。所以你不应该手动编辑这个文件。

【讨论】:

  • 每天学习新东西!谢谢!
  • 万一你捡起这个,Michal - 我现在有我的暂存触发器,它显示在 pg_trigger 中,但我仍然没有成功触发它,无论我手动更新表格或使用我的应用程序创建适当数量的条目...想法?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-27
  • 1970-01-01
  • 2019-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多