如何在不执行原始 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

中所述