ruby-on-rails - 添加索引迁移中的唯一性被忽略
问题描述
我正在尝试向现有索引添加唯一约束,因此我确实在迁移中删除并添加索引,一切正常,但是当我查看 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
解决方案
好的,实际上这看起来像我的 postgres 数据库管理器(dbeaver-ce)中的一个错误,它没有显示唯一检查
当我使用 \d+ company_lists 查看 psql 时,我看到该索引具有 UNIQUE 约束
推荐阅读
- sql - MS Access - 通过多个连接表求和的查询
- apache-kafka - 这不是正确的协调员/不知道该成员的协调员
- php - Visual Studio Code PHP 调试器在远程调试时不会在断点处停止
- amazon-web-services - 无法创建预签名 URL 以从 eu-west-3 下载对象
- c - 创建代码以打印 3 个数字之间的最大值的问题
- sql - 如何从 SQL Server 删除 CSV 导出中填充的双引号
- python - 无法在 Django 中引用相关的多对多对象
- html - 浏览器密码管理器可以只记住用户名吗?
- sql-server - 更新 SQL Server 中具有列名的所有表中的值
- git - Git LFS 文件未推送到远程仓库