如何在不执行原始 SQL 查询的情况下在 Activerecord 中添加数据库域?
How to add a database domain in Activerecord without executing a raw SQL query?
我想创建一个数据库域,例如像这样:
CREATE DOMAIN colour AS VARCHAR CHECK (VALUE IN ('red', 'green', 'blue'));
如何在 Rails Activerecord 中执行此操作而不在迁移中执行原始 SQL 查询?
另一个问题是,如何在 schema.rb 中反映域创建?
有没有gem呢?
我的设置是 PostgreSQL 9.6 和 Rails 5.0。
我希望有像 enable_extension
(docs) or create_trigger
as in hair_trigger gem (link) 这样的方法。
我认为最好的方法实际上是为此
编写一个带有原始 SQL 的迁移
class ExampleMigration < ActiveRecord::Migration
def change
reversible do |dir|
dir.up do
# create color ype
execute <<-SQL
CREATE DOMAIN colour AS VARCHAR CHECK (VALUE IN ('red', 'green', 'blue'));
SQL
end
dir.down do
# drop color type
execute <<-SQL
DROP DOMAIN colour;
SQL
end
end
end
end
然后您可以设置一个运行这些迁移的 rake 任务,如 answer
中所述
我想创建一个数据库域,例如像这样:
CREATE DOMAIN colour AS VARCHAR CHECK (VALUE IN ('red', 'green', 'blue'));
如何在 Rails Activerecord 中执行此操作而不在迁移中执行原始 SQL 查询?
另一个问题是,如何在 schema.rb 中反映域创建?
有没有gem呢?
我的设置是 PostgreSQL 9.6 和 Rails 5.0。
我希望有像 enable_extension
(docs) or create_trigger
as in hair_trigger gem (link) 这样的方法。
我认为最好的方法实际上是为此
编写一个带有原始 SQL 的迁移class ExampleMigration < ActiveRecord::Migration
def change
reversible do |dir|
dir.up do
# create color ype
execute <<-SQL
CREATE DOMAIN colour AS VARCHAR CHECK (VALUE IN ('red', 'green', 'blue'));
SQL
end
dir.down do
# drop color type
execute <<-SQL
DROP DOMAIN colour;
SQL
end
end
end
end
然后您可以设置一个运行这些迁移的 rake 任务,如 answer
中所述