Jetez un oeil à cette réponse. Essayez d'execute "ALTER TABLE shareholders ADD PRIMARY KEY (uid);"
sans spécifier le paramètre primary_key dans le bloc create_table.
Je suggère d'écrire votre migration comme ceci (afin que vous puissiez revenir en arrière normalement) :
class CreateShareholders < ActiveRecord::Migration
def up
create_table :shareholders, id: false do |t|
t.integer :uid, limit: 8
t.string :name
t.integer :shares
t.timestamps
end
execute "ALTER TABLE shareholders ADD PRIMARY KEY (uid);"
end
def down
drop_table :shareholders
end
end
UPD : Il existe un moyen naturel (trouvé ici), mais uniquement avec le type int4 :
class CreateShareholders < ActiveRecord::Migration
def change
create_table :shareholders, id: false do |t|
t.primary_key :uid
t.string :name
t.integer :shares
t.timestamps
end
end
end