sqlite3で追加できないカラムを追加する

基本的にカラムを追加する場合は

ALTER TABLE テーブル ADD COLUMN カラム;

で追加できるのだが、追加できないカラムがある。
 

The column may not have a PRIMARY KEY or UNIQUE constraint.
The column may not have a default value of CURRENT_TIME, CURRENT_DATE, CURRENT_TIMESTAMP, or an expression in parentheses.
If a NOT NULL constraint is specified, then the column must have a default value other than NULL.
If foreign key constraints are enabled and a column with a REFERENCES clause is added, the column must have a default value of NULL.

SQLite Query Language: ALTER TABLE引用

ようするに、PRIMARY KEYやUNIQUE、DEFAULT値にCURRENT_TIME CURRENT_DATE  CURRENT_TIMESTAMPを設定、DEFAULTのないNOT NULLなどは基本的に追加できない。
 
 
そこで、無理矢理カラムを追加してみた。
 
 
たぶん、やり方は2パターン(他にもあるかも)

  • .dumpでデータベースのバックアップファイルを作成し、dumpファイルのCREATE文のところを編集し、.readする。
  • テーブルをリネームし、新しくテーブルを作成したら、リネームしたデータベースから新しいデータベースにデータをINSERTする。

 
 
.dumpはテーブル数が多くなると時間がかかりかねないので、今回は二番目の方法でやってみた。
 
 

ALTER TABLE テーブル RENAME TO TMP;
CREATE TABLE テーブル(ID, NAME, ...); <=新しいカラム追加
INSERT INTO テーブル(ID, NAME, ...) SELECT ID, NAME, ... FROM TMP;
DROP TABLE TMP;
VACUUM;

 
 
もっとスマートにできる方法ないかな。
 
 

SQLite入門 第2版

SQLite入門 第2版


SQLite ポケットリファレンス

SQLite ポケットリファレンス


CD付 SQL ゼロからはじめるデータベース操作 (プログラミング学習シリーズ)

CD付 SQL ゼロからはじめるデータベース操作 (プログラミング学習シリーズ)


Using SQLite

Using SQLite