从 Rails 模式文件中删除 SQL 代码
Remove SQL code from Rails schema file
所以不久前我在使用触发器并在我的一个表中添加了一些用于插入和更新事件,因此它们进入了我的 schema.rb
但后来我找到了一种不使用触发器的方法并且从 dabatase 控制台中删除了它们,但它们的 sql 代码显然没有从模式文件中删除,所以现在我在其中有类似的东西:
execute(<<-TRIGGERSQL)
CREATE OR REPLACE FUNCTION public.arguments_vector_update()
RETURNS trigger
LANGUAGE plpgsql
AS $function$
BEGIN
IF TG_OP = 'INSERT' THEN
new.tsv_body = to_tsvector('pg_catalog.simple', COALESCE(NEW.text, ''));
END IF;
IF TG_OP = 'UPDATE' THEN
IF NEW.text <> OLD.text THEN
new.tsv_body = to_tsvector('pg_catalog.simple', COALESCE(NEW.text, ''));
END IF;
END IF;
RETURN NEW;
END
$function$
TRIGGERSQL
而且我想我也删除了迁移文件-_-
我可能会添加一个新的迁移,其中包含删除触发器的代码,但它会使架构文件更加混乱,所以我想知道是否有另一种方法可以从架构文件中删除此代码?
我正在使用 PSQL,如果它很重要的话。
rake -T
在 Rails 应用程序中会这样说:
rake db:schema:dump # Create a db/schema.rb file that is portable against any DB supported by AR
因此您可以在需要时随时rake db:schema:dump
生成新的db/schema.rb
文件。
所以不久前我在使用触发器并在我的一个表中添加了一些用于插入和更新事件,因此它们进入了我的 schema.rb
但后来我找到了一种不使用触发器的方法并且从 dabatase 控制台中删除了它们,但它们的 sql 代码显然没有从模式文件中删除,所以现在我在其中有类似的东西:
execute(<<-TRIGGERSQL)
CREATE OR REPLACE FUNCTION public.arguments_vector_update()
RETURNS trigger
LANGUAGE plpgsql
AS $function$
BEGIN
IF TG_OP = 'INSERT' THEN
new.tsv_body = to_tsvector('pg_catalog.simple', COALESCE(NEW.text, ''));
END IF;
IF TG_OP = 'UPDATE' THEN
IF NEW.text <> OLD.text THEN
new.tsv_body = to_tsvector('pg_catalog.simple', COALESCE(NEW.text, ''));
END IF;
END IF;
RETURN NEW;
END
$function$
TRIGGERSQL
而且我想我也删除了迁移文件-_-
我可能会添加一个新的迁移,其中包含删除触发器的代码,但它会使架构文件更加混乱,所以我想知道是否有另一种方法可以从架构文件中删除此代码?
我正在使用 PSQL,如果它很重要的话。
rake -T
在 Rails 应用程序中会这样说:
rake db:schema:dump # Create a db/schema.rb file that is portable against any DB supported by AR
因此您可以在需要时随时rake db:schema:dump
生成新的db/schema.rb
文件。