RubyでSQLiteのカラム名の変更をする方法

SQLiteでカラム名の変更をする方法 - Hacking My Way 〜 itogのhack日記ではdbファイルのサイズが大きくなってしまったので、Rubyで別のdbファイルを作ってコピーすることにした。

コードは以下の通り。

#!/usr/local/bin/ruby -Ku

require 'rubygems'
require 'sqlite3'

db_org = SQLite3::Database.new("org.sqlite")
db_new = SQLite3::Database.new("new.sqlite")

sql = <<SQL
CREATE TABLE "table_name" ("col_a" TEXT , "col_b" TEXT);
SQL
db_new.execute(sql)

begin
  sql = "SELECT * FROM table_name"
  db_org.execute(sql) {|col_a, col_b|
    new_item = {:col_a => col_a, :col_b => col_b}
    sql = "INSERT INTO table_name VALUES (:col_a, :col_b)"
    db_new.execute(sql, new_item)
  }
rescue => e
  puts e.message
end

db_org.close
db_new.close

カラム名の変更に限らず、あるDBを元にして違うDBを作る場合はcreate tableとinsertの処理を変えるだけでできるので、こっちの方が便利。新しいDBをつくってるので、ゴミが残ってサイズがでかくなるということもない。