環境
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)
0 コメント