[Rails] 作成済のテーブルから、ID列のauto_incrementを停止する

環境

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 コメント