Heroku PostgresにSQLファイルを読み込ます
Heroku PostgresにはCSVファイルを挿入できないようなのでCSVファイルからinsert文のSQLファイルをつくる。
つくったSQLファイルをHeroku Postgresに読み込ませればレコードを挿入できる。
目次
- 前提条件
- CSVファイル
- Heroku Postgresのテーブル
- CSVファイルをSQLファイルに変換するコード
- 実行結果
- Heroku Postgres
- Heroku PostgresにSQL文を読み込ます
- 今回の動作確認環境
前提条件
Heroku Postgresを操作するにはローカルにもPostgreSQLがインストールされている必要がある。
Heroku上でデータベースとテーブルの設定を済ましておく。
CSVファイル
今回のサンプル
sample.csv
2018,全日本大学選手権,男子エイト,1,Aクルー,05:55.91 2018,全日本大学選手権,男子エイト,2,Bクルー,06:00.70 2018,全日本大学選手権,男子エイト,3,Cクルー,06:01.04 2018,全日本大学選手権,男子エイト,4,Dクルー,06:03.31
Heroku Postgresのテーブル
テーブル名: samples
Column | Type |
---|---|
id | integer |
year | smallint |
tournament_name | character varying(20) |
event_name | character varying(20) |
rank | smallint |
crew | character varying(20) |
goaltime | character varying(10) |
# idはserial primary key
CSVファイルをSQLファイルに変換するコード
rewrite.rb
require 'csv' class Sqlwriter def initialize(csv_file, sql_file) @csv_file = csv_file @sql_file = sql_file end def rewrite txt = "insert into samples (year,tournament_name,event_name,rank,crew,goaltime) values \n" CSV.foreach(@csv_file) do |csv_file| txt << "(#{csv_file[0]},'#{csv_file[1]}','#{csv_file[2]}',#{csv_file[3]},'#{csv_file[4]}','#{csv_file[5]}'),\n" end txt.gsub!(/,\Z/,";") open(@sql_file,"w") do |sql_file| sql_file.write txt end end end Sqlwriter.new("sample.csv","sample.sql").rewrite
実行結果
rewrite.rbとsample.csvを同じディレクトリに置いて実行する。
実行結果は次のとおり。
sample.sql
insert into samples (year,tournament_name,event_name,rank,crew,goaltime) values (2018,'全日本大学選手権','男子エイト',1,'Aクルー','05:55.91'), (2018,'全日本大学選手権','男子エイト',2,'Bクルー','06:00.70'), (2018,'全日本大学選手権','男子エイト',3,'Cクルー','06:01.04'), (2018,'全日本大学選手権','男子エイト',4,'Dクルー','06:03.31');
Heroku Postgres
Heroku PostgresのWebページ
Heroku Dev Center
Heroku Postgres
https://devcenter.heroku.com/articles/heroku-postgresql
Heroku PostgresにSQL文を読み込ます
Herokuにログインする前にターミナルのcd
コマンドでsample.sqlファイルがある場所に移動しておく。
移動したらHerokuにログインする。
heroku login #メールアドレスとパスワードが必要
Heroku Postgresにログインする。
heroku pg:psql --app [appname] #[appname]は各自のアプリ名
SQLファイルを読み込ませてデータベースにレコードを挿入する。
\i sample.sql
SQLファイルの内容が実行されてレコードが挿入される。
Heroku Postgresからログアウトする。
\q
Herokuからログアウトする。
heroku logout