首页 > 解决方案 > 添加索引迁移中的唯一性被忽略

问题描述

我正在尝试向现有索引添加唯一约束,因此我确实在迁移中删除并添加索引,一切正常,但是当我查看 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

标签: ruby-on-railspostgresqlruby-on-rails-6

解决方案


好的,实际上这看起来像我的 postgres 数据库管理器(dbeaver-ce)中的一个错误,它没有显示唯一检查

当我使用 \d+ company_lists 查看 psql 时,我看到该索引具有 UNIQUE 约束


推荐阅读