Postgresql(クラウド)⇒Sqlite3(ローカル)
Render.comで動作しているPostgresqlのテーブル情報をCSVファイルにエクスポートしました。そのデータをローカルで見たくてSqlite3にインポートしました。
手順は以下です。sqlite3 development.sqlite3で起動したあと。
.mode csv .import ファイル名 テーブル名
参考記事:SQLite | CSV形式のデータをファイルからインポート(.importコマンド)
問題なくインポートできました。Railsサーバを起動して動作したものの、一部、RubyオブジェクトをMarshalで固めてバイナリ型として保存していた項目を読み出そうとしたときに例外が発生しました。CSVファイルをエクスポートしたのが悪かったのでしょう。恐らく。
Postgresql(クラウド)⇒Sqlite3(ローカル)
Sqlite3だからダメか?と思い、ローカルにbrewでいれたpostgresqlサーバがあったので、それを起動して、Railsのdatabase.ymlを書き換えてrails db:migrateしました。この辺は以下の記事を参考にさせてもらいました。
参考記事(postgresqlのインストール):brewでpostgresのセットアップ 参考記事(railsの設定):How To Use PostgreSQL with Your Ruby on Rails Application on macOS | DigitalOcean
さらに、CSVファイルをpostgresqlにインポートしました。手順は以下の記事を参考にしました。psql データベース名で接続して以下のコマンド入力です。
\copy テーブル名 from 'CSVファイル名(フルパス)' delimiter ',' csv header;
参考記事:PostgreSQLでCSVファイルをインポート/エクスポートする方法 | アシスト
で、結果、ダメ。sqlite3と同じ動作でした。やはりCSVデータなのでバイナリデータがSQL文にはならなかった。。。はず。Marshalが悪さしている可能性も否定できませんが。
とりあえずMarshal以外のデータを見れるように改訂
Marshalデータは補足的なデータなのでこれをローカルで見れなくても大きな影響はありませ。ただ、Railsアプリが途中でコケてしまうとせっかく保存したCSVファイルが見れませんので。。。ということでMarshal.loadしたときに例外が発生する場合はスキップするように変更しました。
とりあえず。