我创建了一个没有主键的表(:id => false),但现在它已经回来咬我的屁股。我如何在rails中追溯添加主键到我的表中?
我的应用程序已经投入生产,我不能放弃它并重新创建另一个应用程序。
有没有办法运行迁移来向我的表添加另一个自动增量主键列?
我创建了一个没有主键的表(:id => false),但现在它已经回来咬我的屁股。我如何在rails中追溯添加主键到我的表中?
我的应用程序已经投入生产,我不能放弃它并重新创建另一个应用程序。
有没有办法运行迁移来向我的表添加另一个自动增量主键列?
我知道mySQl中可以添加一个具有默认增量值的列。 如果添加,那么每行将有一个唯一的int值(并且任何新行将获得大于最后一行添加的int值1)
您可以添加此列并将其设置为主键。
是否有轨道的做法呢? – 2011-03-16 16:51:07
或者SQL语句是否可以用于sqlite和PostgreSQL? – 2011-03-16 16:51:36
这是一个连接表,现在需要成为一个真正的主键模型?如果是这样,你最好的选择是创建新表并将数据复制到其中。
将数据传输到新表格的最佳方法是什么? – 2011-03-16 16:53:51
的命令添加在迁移主键是:
add_column :my_table, :id, :primary_key
然而,你的问题的措辞表明,你的表已经有一个自动增量列。除非我弄错了,否则有几个DBMS不允许在一个表上使用多个自动增量列。
如果您已经拥有一个自动递增列,你真的想使用该列作为主键,只需添加以下模型:
set_primary_key "my_existing_column"
或者在较新版本的扶手:
self.primary_key = "my_existing_column"
在你已经有一个自动递增列,你不能使用它作为主键,你可能是出于运气的情况下。
谢谢。非常有用的信息。 – 2013-05-30 14:36:20
看起来像set_primary_key不存在了https://github.com/composite-primary-keys/composite_primary_keys/issues/83 – frankpinto 2015-09-08 06:26:35
如果由于某种原因您创建了一个带有自定义id
字段的表格,但忘记将id
设置为主键,则需要运行迁移以创建主键约束。以下是针对PostgreSQL数据库进行测试的:
class AddPrimaryKeyConstraintToFoobars < ActiveRecord::Migration
def up
execute "ALTER TABLE foobars ADD PRIMARY KEY (id);"
end
def down
execute "ALTER TABLE foobars DROP CONSTRAINT foobars_pkey;"
end
end
您正在使用哪种数据库引擎? – Augusto 2011-03-16 16:40:42
请务必测试您在测试系统上所做的任何更改,而不是生产上的更改! – 2011-03-16 16:44:00
sqlite正在开发中,但PostgreSQL正在开发中 – 2011-03-16 16:48:27