2
我的數據庫中有一個觸發器,它生成一個隨機ID「BEFORE INSERT」。Postgresql觸發器不執行Rails Fixtures
對於在測試中使用的rails fixtures,它們不會生成(觸發器在db中,我檢查過)。
爲什麼?
我的數據庫中有一個觸發器,它生成一個隨機ID「BEFORE INSERT」。Postgresql觸發器不執行Rails Fixtures
對於在測試中使用的rails fixtures,它們不會生成(觸發器在db中,我檢查過)。
爲什麼?
Rails Fixtures不一定以滿足數據庫約束的順序加載,所以Rails解決方案是在加載fixture時關閉它們。
例如,在PostgreSQL,這裏是一些SQL Rails所執行
(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
);
Offtopic:爲什麼不使用SERIAL數據類型來生成一個數字?幾乎適用於每種情況,並且比觸發器更快。 –