【Django】エラー文「django.db.utils.OperationalError: (1060, “Duplicate column name ‘[column name]'”)」が起きた。
2022/10/31
2022/10/31
Djangoでマイグレーションをしようとしたところ、カラム重複のエラーが起きて上手くマイグレーションできませんでした。
その時のメモになります。
エラー時の状況
「カラムの重複」がエラーとして表示されましたが、models.pyを見返してみると重複がみられませんでした。
改めて確認すると、データベースには新しいカラムが更新できていたにも関わらず、showmigrations
で確認するとマイグレーションがまだ行われていない状態になっていました。
$ python manage.py showmigrations
...
api
[X] 0001_initial
[X] 0002_article_articlestore
[X] 0003_auto_20221023_1335
[ ] 0004_auto_20221031_1055 # DB上は反映済なのに[ ]のまま
# ↑反映済だから本来[X]になるはず
...
エラーの原因
原因は正確にはよくわかりませんでした。
もしかするとマイグレーションの途中でWifiの接続が切れてしまったなどが原因で、ズレが起きてしまったのかもしません。
エラーの解消法
過去のマイグレーションファイルまでデータベース状況を戻して(ロールバックして)から、再度migrateを行うことで解消することができました。
手順としては「①showmigrations
でマイグレーション履歴を確認する」→「②過去のマイグレーションファイルの状態へ戻す」→「③再度migrateを行う」です。
マイグレーション履歴を確認する
$ python manage.py showmigrations
...
api
[X] 0001_initial
[X] 0002_article_articlestore
[X] 0003_auto_20221023_1335
[ ] 0004_auto_20221031_1055
...
過去のマイグレーションファイルの状態に戻す
$ python manage.py migrate [アプリケーション名] [マイグレーションファイル名]
# $ python manage.py migrate api 0002_article_articlestore
$ python manage.py showmigrations
...
api
[X] 0001_initial
[X] 0002_article_articlestore # 一旦ここまで戻した
[ ] 0003_auto_20221023_1335
[ ] 0004_auto_20221031_1055
...
マイグレーションを実行する
$ python manage.py migrate
$ python manage.py showmigrations
...
api
[X] 0001_initial
[X] 0002_article_articlestore
[X] 0003_auto_20221023_1335
[X] 0004_auto_20221031_1055 # 更新された
...
ただし、過去のマイグレーションに戻す際に、そのマイグレーション以降に更新したデータなどは消去されてしまうので注意が必要です。
もしかしたらよりよい解決法があるのかもしれません。
(今回は特にデータの更新などは行っていなかったので、問題はありませんでした。)
まとめ
エラーの原因が特定できなかったので今後また起きてしまわないか少し不安ですが、マイグレーションについて少しわかることが増えたのでその点はよかったです。
ただマイグレーションは上手く扱わないと大事なデータに影響を与えてしまう可能性があるので、もう少し詳しく調べていきたいと思います。
最近の記事
音楽生成AI「Suno」の使い方まとめ!作詞作曲が簡単にできる?
簡単に曲が作れるAIということでよく聞く「Suno(Chirp)」についてまとめました。
目次「Suno」とはテキストからさまざまな音声を生成する「Bark」歌詞から曲を生成する「Chirp」...
2023/11/24
2023/11/24
【Open AI】APIの料金まとめ|GPT・DALL·E・Whisperなど
Open AIのAPI(一部)の料金をまとめました。
参考のために日本円は「1ドル150円」で換算をしています。
目次Text generation: テキスト生成Assistants ...
2023/11/22
2023/11/22
【Next.js】Assistants APIの基本的なコードまとめ。
Open AIの「Assistants API」をNext.jsで使用する時の基本的なコードをまとめました。
目次Open AIのAPIセットアップ基本の使い方Threads: スレッドを作る...
2023/11/21
2023/11/21
【Next.js】Open AIのAPIでファイルをアップロードする方法。
今回は、Next.jsサイトからOpen AIのAPI(Upload file)で、ファイルをアップロードする方法を実装するのに時間がかかったのでその過程と最終コードをまとめます。(Vercelにデ...
2023/11/21
2023/11/22
「生成系AIのWEBプロダクトTOP50」をまとめてみる。
Andreessen Horowitzが出している記事で紹介されている「AIプロダクトの月間訪問者数ランキングTOP50」のサービスをまとめました。
目次ChatGPTcharacter.ai...
2023/10/3
2023/10/3
【Next.js 13】NextAuth+FireStoreにユーザー情報を保存する。
今回は、以下の3つをNext.js 13で実装するためのメモです。
Googleアカウントでログインできる
アカウント、セッション情報をFirestoreに保存する
サーバーサイ...
2023/7/12
2023/7/12