現在、SQLite を使用するアプリがあります。そして今、それをPostgreSQLに変更しています。テーブル構造が変更されます。しかし、以前のデータベースから新しいデータベースにデータをインポートしたいと考えています。
データを取得して新しいテーブルに保存するにはどうすればよいですか?
URLからjsonを取得してテーブルにデータを保存するなど、いくつか試してみましたが、json文字列の解析に問題があります。なので、どうしようか迷っています。
現在、SQLite を使用するアプリがあります。そして今、それをPostgreSQLに変更しています。テーブル構造が変更されます。しかし、以前のデータベースから新しいデータベースにデータをインポートしたいと考えています。
データを取得して新しいテーブルに保存するにはどうすればよいですか?
URLからjsonを取得してテーブルにデータを保存するなど、いくつか試してみましたが、json文字列の解析に問題があります。なので、どうしようか迷っています。
モデルのメソッドを使用して、sqlite から sql ファイルにデータをエクスポートできます。このようにして、テーブル構造が変更されたため、テーブルの列名を変更できます。
の sql_export メソッドapp/models/user.rb
:
class User < ActiveRecord::Base
def self.sql_export
filecontent = ""
User.all.each do |user|
filecontent << "INSERT INTO users (email, password) VALUES ('#{user.email}','#{user.password}');"
end
File.open("tmp/export.sql", "w+") do |f|
f.write(filecontent)
end
end
Rails コンソールを起動し、メソッドを実行します ( SQLite データベースに接続する環境で実行していることを確認してください)。
$> rails c
$ irb> User.sql_export
基本的に、データベースからすべてのデータを読み取り、挿入ステートメントを生成してtmp/export.sql
ファイルに書き込みます。
次に、sql ファイルを postgresql にインポートします。
psql databasename < tmp/export
次のようにjsonデータを解析する方法を見つけました
url = "http://samplesite/export_data.json"
resp = Net::HTTP.get_response(URI.parse(url))
data = resp.body
post_data = JSON.parse(data)
post_data.each do |value|
u = Model.new
u.field = value['name']
u.save
end
これを使用してテーブルからデータを取得し、それに応じて別のテーブルに保存できます。