columnのdrop
sqlで面白そうなことやってたのでツッこんでみる
結果つけたら結構でかくなったのでこっちで。
まずはテストテーブルの作成
sqlite> .explain on sqlite> create table test ( ...> id integer, ...> field1 text ...> );
カラムの追加
sqlite> alter table test add column field2 text; sqlite> insert into test values (1, 'field1', 'field2'); sqlite> select * from test; id field1 field2 ---- -------------- ---------- 1 field1 field2
カラムの削除
sqlite> alter table test drop column field1; SQL error: near "drop": syntax error
試してみたところ確かにdrop column使えませんね。
しかーし
sqlite> alter table test rename to temp; sqlite> select * from temp; id field1 field2 ---- -------------- ---------- 1 field1 field2
テーブルのリネームは可能です。
そこで旧テーブルからいらないカラムをドロップしたテーブルを作り直し・・・
sqlite> create table test ( ...> id integer, ...> field2 text ...> );
insert into table_name select・・・でリネームしたテーブルから残ったカラムのデータをコピーすれば・・・
sqlite> insert into test select id, field2 from temp; sqlite> select * from test; id field2 ---- -------------- 1 field2
カラムのドロップをしたテーブルができあがります。
sqlite> drop table temp; sqlite> select * from temp; SQL error: no such table: temp
あとはいらなくなった旧テーブルを削除すればOK。
たしか昔のバージョンだったかのMySQLだったかでのdrop column方法としてどっかで載ってた方法だったはずです。もしかしたらPostgreSQLだったかもしれませんが・・・
元のテーブルがもつカラム名とか型がわからないと新規に作り直せないので多少面倒ですけど(データベースによってはシステムディクショナリなどから存在するテーブル情報やカラム情報を取り出すことが出来、簡単に作れるデータベースもあります)。