在 rails 迁移中创建约束

Create constraints in rails migrations

我有一个创建命名约束的迁移

execute(%Q{
  ALTER TABLE dreamflore_clients
    ADD CONSTRAINT unique_clients UNIQUE( client, no_adresse );
})

但是在schema.rb中,rails把这部分变成索引

add_index "dreamflore_clients", ["client", "no_adresse"], name: "unique_clients", unique: true, using: :btree

问题是我们正在使用 Apartment 并且新创建的租户有一个索引而不是约束并且我们正在使用 postgreSQL 功能 ON CONFLICT ON CONSTRAINT

目前的解决方案是回滚一些迁移并再次迁移,但这是一个非常肮脏的 hack

如何停止rails创建这个索引?

您是否尝试过 structure.sql 而不是 运行 rake db:structure:dump schema.rb?

schema.rb 在语法方面有一些限制,切换到 structure.sql 应该可以解决这个问题。

您可以通过将 config.active_record.schema_format = :sql 添加到 environment.rb 来永久切换到 structure.sql。