環境
Rails 7.0.7.2
ruby 3.1.4
内容
作成済のテーブルから、ID列のauto_incrementをやめ、作成時にIDを指定する方式に変更したいです。
create_table :users, id: false
を用いて、テーブル作成時にID列を自動作成しない方法はあるようですが、
今回のケースでは、作成済のテーブルに対してauto_incrementのみを止めたい形になります。
変更前のテーブル
create_users.rb
1def change 2 create_table :users do |t| 3 t.string :name, null: false 4 t.timestamps 5 end 6end
sqlite> .schema users CREATE TABLE IF NOT EXISTS "users" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar NOT NULL, "created_at" datetime(6) NOT NULL, "updated_at" datetime(6) NOT NULL);
試したこと
以下2つの方法を試しましたが、AUTOINCREMENTは外れませんでした。
def up change_column :users, :id, :primary_key, auto_increment: false end
def up remove_column :users, :id add_column :users, :id, :primary_key, auto_increment: false add_index :users, :id, unique: true end
実行後
CREATE TABLE IF NOT EXISTS "users" ("name" varchar NOT NULL, "created_at" datetime(6) NOT NULL, "updated_at" datetime(6) NOT NULL, "id" integer PRIMARY KEY AUTOINCREMENT NOT NULL);
参考
【Rails】主キーのidをオートインクリメントさせないマイグレーションファイル
Rails5でMySQLのid以外にbigint + primary key + auto increment する。(migration)
追記:回答1とその実行結果
参考:Rails + mysql でテーブルのidのauto incrementをやめる
change_column :users, :id, 'int(11) PRIMARY KEY' # => SQLException: table "users" has more than one primary key
remove_column :users, :id add_column :users, :id, 'int(11) PRIMARY KEY' # => SQLException: Cannot add a PRIMARY KEY column
remove_column と add_column を別々のマイグレーションファイルに分け
remove_column 実行直後にsqliteからusersテーブルのスキーマを確認した際には、idカラムが消えていたことは確認しています。
int(11)
ではなくBIGINT
の場合も同様でした。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/09/13 08:01
2023/09/13 09:40