背景
SQLite3のデータベースで、後からUNIQUE制約を付与する作業が発生しました。
しかし、SQLite3では後から制約を変更する方法は用意されていません。
この方法を記しておきます。
手順
まず、基本として、後から制約する場合は新しいデータベースを作成する必要があります。
そのため、データベースを一旦エクスポートして、それを新しいデータベースにインポートする作業を行います。
エクスポート dump
エクスポートにはdumpコマンドを使用します。
ここでは、データベースファイルは「wikipedia_summary.db」です。
$ sqlite3 db/wikipedia_summary.db
SQLite version 3.26.0 2018-12-01 12:34:55
Enter ".help" for usage hints.
sqlite> .output dump.sql # outputコマンドでファイルに出力することを指定します
sqlite> .dump # ファイルにエクスポートを実行
sqlite> .quit
新しいデータベースファイルを作成
UNIQUE制約のある新しいデータベースファイルを作成してください。
ここでは、「wikipedia_summary2.db」という新しいDBファイルを作成しました。
インポート read
新しいデータベースファイルにインポートします。
UNIQUE 制約に引っかかったデータはfailして登録されません。
$ sqlite3 db/wikipedia_summary2.db
SQLite version 3.26.0 2018-12-01 12:34:55
Enter ".help" for usage hints.
sqlite> .read dump.sql
Error: near line 3: table wikipedia_summary2 already exists
Error: near line 276824: UNIQUE constraint failed: wikipedia_summary2.request
Error: near line 276864: UNIQUE constraint failed: wikipedia_summary2.request
Error: near line 276865: UNIQUE constraint failed: wikipedia_summary2.request
Error: near line 276867: UNIQUE constraint failed: wikipedia_summary2.request
Error: near line 276868: UNIQUE constraint failed: wikipedia_summary2.request
Error: near line 276870: UNIQUE constraint failed: wikipedia_summary2.request
Error: near line 276871: UNIQUE constraint failed: wikipedia_summary2.request
Error: near line 276873: UNIQUE constraint failed: wikipedia_summary2.request
Error: near line 276874: UNIQUE constraint failed: wikipedia_summary2.request
Error: near line 276876: UNIQUE constraint failed: wikipedia_summary2.request
Error: near line 276877: UNIQUE constraint failed: wikipedia_summary2.request
Error: near line 276879: UNIQUE constraint failed: wikipedia_summary2.request
Error: near line 276880: UNIQUE constraint failed: wikipedia_summary2.request
Error: near line 276882: UNIQUE constraint failed: wikipedia_summary2.request
Error: near line 276884: UNIQUE constraint failed: wikipedia_summary2.request
Error: near line 276885: UNIQUE constraint failed: wikipedia_summary2.request
Error: near line 276887: UNIQUE constraint failed: wikipedia_summary2.request
Error: near line 276888: UNIQUE constraint failed: wikipedia_summary2.request
Error: near line 276890: UNIQUE constraint failed: wikipedia_summary2.request
Error: near line 319347: UNIQUE constraint failed: wikipedia_summary2.request
Error: near line 319392: UNIQUE constraint failed: wikipedia_summary2.request
Error: near line 409169: UNIQUE constraint failed: wikipedia_summary2.request
Error: near line 1024862: UNIQUE constraint failed: wikipedia_summary2.request
Error: near line 1024865: UNIQUE constraint failed: wikipedia_summary2.request
Error: near line 1024979: UNIQUE constraint failed: wikipedia_summary2.request
Error: near line 1024996: UNIQUE constraint failed: wikipedia_summary2.request
Error: near line 1024997: UNIQUE constraint failed: wikipedia_summary2.request
sqlite> .quit
データベースファイルを上書き
成功したらデータベースファイルを上書きしてしまいます。
mv db/wikipedia_summary2.db db/wikipedia_summary.db
以上で完了です。
コメント