gpt4 book ai didi

ruby-on-rails - 使用 Rails 和 PostgreSQL 的双主键索引

转载 作者:行者123 更新时间:2023-11-29 13:05:20 26 4
gpt4 key购买 nike

我在我的表中使用 UUID 作为主键,以这种方式创建:

迁移:

class CreateAccounts < ActiveRecord::Migration
def change
create_table :accounts, :id => false do |t|
t.uuid :uuid, :null => false
t.timestamps
end
execute "ALTER TABLE accounts ADD PRIMARY KEY (uuid);"
add_index :accounts, :uuid, :unique => true
end
end

型号:

class Account < ActiveRecord::Base  
primary_key = :uuid
base.default_value_for(:uuid, :allows_nil => false) { UUIDTools::UUID.random_create.to_s }
end

但我现在看到我在主键 UUID 列上有双索引:

Double indexes on the primary key

(1) 我猜这来自创建“XXX_pkey”索引的ADD PRIMARY KEY,我可以安全地删除add_index :accounts, :uuid , :unique => true 在此迁移中和来自正在运行的数据库?

(2) 可以看到只使用了手动添加的索引,没有使用自动添加的。这是随机的吗?

(3) 应删除哪些索引?通过 Rails 的迁移在生产中执行此操作的最佳方法是什么?

最佳答案

定义为主键的列(根据定义)是唯一的。 PostgreSQL(实际上是每个 DBMS)都会自动创建一个唯一索引来确保这一点。

因此无需手动创建额外的唯一索引。

所以你应该删除你手动创建的那个(我不知道 Ruby,在普通 SQL 中这就像 drop index ... 一样简单)

关于ruby-on-rails - 使用 Rails 和 PostgreSQL 的双主键索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14705459/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com