【发布时间】:2021-12-17 21:22:16
【问题描述】:
我正在尝试向现有索引添加唯一约束,因此我在迁移中删除并添加索引,一切正常,但是当我查看 postgres 时,我仍然看不到该索引上的任何唯一约束,并且我的 upsert 代码失败消息,该列上没有唯一索引
这是我的迁移
remove_index :company_lists, :company_id
add_index :company_lists, :company_id, :unique=> true
我错过了什么? 该列是外键,如果我尝试迁移以先删除外键然后添加,结果完全相同
编辑:我在迁移中也尝试了 SQL 代码,但结果相同,在 schema.rb 中我看到该列应该是唯一的,在 postgres 中我不认为它是唯一的
class AddUniqIndexToCompanyList < ActiveRecord::Migration[6.1]
def up
execute <<-SQL
DROP INDEX IF EXISTS index_company_lists_on_company_id;
CREATE UNIQUE INDEX index_company_lists_on_company_id on company_lists(company_id);
SQL
end
def down
execute <<-SQL
DROP INDEX IF EXISTS index_company_lists_on_company_id;
CREATE INDEX index_company_lists_on_company_id on company_lists(company_id);
SQL
end
end
【问题讨论】:
-
唯一属性是否出现在
schema.rb文件中? -
是的,它出现在 schema.rb t.index ["company_id"],名称:"index_company_lists_on_company_id",唯一性:true
-
是的,迁移运行良好并且针对正确的数据库..如果我添加相同的迁移添加列或其他内容,我看到正确的表已修改
标签: ruby-on-rails postgresql ruby-on-rails-6