gpt4 book ai didi

ruby-on-rails - 不会为Rails固定装置执行Postgresql触发器

转载 作者:行者123 更新时间:2023-12-04 22:06:55 34 4
gpt4 key购买 nike

我的数据库中有一个触发器,该触发器会生成一个随机ID“插入前”。

对于测试中使用的导轨固定装置,不会生成(触发在数据库中,我检查过)。

为什么?

最佳答案

Rails夹具不一定按满足数据库约束的顺序加载,因此Rails解决方案是在加载夹具时将其关闭。

例如,对于postgresql,这是Rails执行的一些sql

 (2.0ms)  ALTER TABLE "admins" DISABLE TRIGGER ALL;ALTER TABLE "schema_migrations" DISABLE TRIGGER ALL;ALTER TABLE "events" DISABLE TRIGGER ALL;
... insert all of the things
(2.1ms) ALTER TABLE "admins" ENABLE TRIGGER ALL;ALTER TABLE "schema_migrations" ENABLE TRIGGER ALL;ALTER TABLE "events" ENABLE TRIGGER ALL;


无法使用固定装置并使它们在加载时触发数据库触发器。使用 https://github.com/thoughtbot/factory_girl之类的对象生成器将触发数据库触发器。

不过,就您而言,有更好的方法来满足您的需求

alter table mytable add column random_column double precision DEFAULT random() NOT NULL


或者,如果它是要随机化的主键列,则应使用uuid。

CREATE EXTENSION "uuid-ossp";
CREATE TABLE some_table (
id uuid PRIMARY KEY NOT NULL DEFAULT uuid_generate_v4(),
some_field character varying,
other_table_id uuid REFERENCES other_table (id) ON DELETE CASCADE NOT NULL
);

关于ruby-on-rails - 不会为Rails固定装置执行Postgresql触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12768918/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com