以下の続きです。
render.comのpostgresqlのテーブルのバックアップを取る(M1 mac) - memorandums
とりあえずpg_dumpなるものを使ってバックアップはとれたものの、開発系ではsqlite3を使いたいのでインポートできないかな。。。と。ちょっとやってみたログです。
まず、pg_dumpするときに、上記の記事での方法で実行するとCOPYコマンドなるものでダンプされるので他のデータベースに持っていったらSQLとして実行できない可能性があります(たぶんposgresql固有のコマンドでは?)。で、pg_dumpするときに--insertsとオプションをつけるとCOPYではなくINSERTコマンドでデータ追加するようにダンプされました。
PGPASSWORD=<YOUR_DB_PASS> pg_dump \ -h postgres.render.com \ -U <YOUR_DB_USER> \ --format=custom --no-acl --no-owner --inserts \ <YOUR_DB_NAME> > <YOUR_DUMP_NAME>.dump
で、これでダンプしたファイルをテキストエディタで開き、postgresql固有のSQLを取り除きます。
先頭のSET、そしてCREATE TABLE文すべて(Railsであればrails db:migrateしたあとでインポートすればいいので)、あとダンプファイルの最後尾にALTER TABLE等があり、これらもエラーになるので削除します。ここまで編集したダンプファイルをsqlite3で.readすると。。。ちゃんとインポート?できました。
ただ。。。今回、読み込んだテーブルにはバイナリデータがありました。これがうまく読み込めない。postgresqlでバイナリデータをてテキストでダンプするときbase64?で文字列化している様子。sqlite3でreadしたらそのままbase64の文字列として表示されていた。でも、sqlite3でbinaryと指定したデータはエンコーディングする前のバイナリデータで保存されていた。だから、うまく表示されなかった様子だった。
この辺の仕組みをあれこれした経験がないので、とりあえず表示するときにbase64でdecodeしてみたけどうまく行かず。。。とりあえず今日の試行はここで終了。とりあえずローカルのpostgresqlに読み込ませてバイナリデータも正しく表示されることはわかっているので、これで研究は進められそう。
モヤモヤが残るけど、ちょっと調べた限りでは対処方法がわからなかった。。。しかたがない。時間は有限。