memorandums

日々の生活で問題解決したこと、知ってよかったことなどを自分が思い出すために記録しています。

render.comのpostgresqlのテーブルのバックアップを取る(M1 mac)

背景

render.comで稼働しているpostgresqlに演習データが溜まっていくのですが、毎週の課題ごとにデータを分離していないのでバックアップして消していました。

バックアップにはMacのクライアントツールであるPostico2というアプリを使っているのですがテーブルごとにCSVデータとしてエクスポートする機能が標準でついていましたのでそれを利用してきました。

Postico 2

ただ、テーブル内にバイナリデータがあるのですが、そのCSVデータをsqlite3に読み込むと当然ですがうまく読み取れないことがわかったのが1週間前くらいだったと思います。

で、別の方法でバックアップしなきゃな。。。と思っていて調べずにいました。

本日、電車で慌てて調べて試行錯誤していました。色々とやったことを少し書いておきます。すぐに忘れるので。。。

とりあえずバックアップはできた

postgresqlのコマンドの1つであるpg_dumpでバックアップできるようでした。

PGPASSWORD=<YOUR_DB_PASS> pg_dump \ -h postgres.render.com \ -U <YOUR_DB_USER> \ --format=custom --no-acl --no-owner \ <YOUR_DB_NAME> > <YOUR_DUMP_NAME>.dump

引用元:Backup Postgresql database using pg_dump? - Render

render.comのpostgresqlにはExternal Database URLがありますのと、もちろん接続するユーザ名・パスワードもありますので、その情報を上記に指定すれば接続できます。

homebrewでいれたpostgresqlがあったのでpsqlコマンドなどは動く状態でした。

とりあえず、ターミナルで上記のコマンドを入力してみたのですが、以下のエラーが。。。

pg_dump: error: server version: 15.2; pg_dump version: 14.8 (Homebrew) pg_dump: error: aborting because of server version mismatch

ふむふむ、バージョンが違うからダメなんだってよ。。。なるほど。

homebrewでは14までしか対応していないようなので。。。新しいバージョンをどうやっていれるか?探したところ一番簡単そうなのがPosgres.appをインストールする、でした。昔のパッケージマネジャがない時代のUnixはそうでしたが、直で入れてしまうと削除が大変なので、こういうアプリで提供されているものであれば、アプリ削除ツール(AppCleaner)で綺麗に消し去ることができますから。

postgresapp.com

で、ダウンロードしてインストールです。Macの普通のアプリと同じです。DMGを開いてappファイルを/Applicationsに投げ込むだけです。

それから恐らくコマンド類は/Applications/Postgresql.appの中にあるだろうから。。。と探すと以下にありました。

/Applications/Postgres.app/Contents/Versions/15/bin

上記のディレクトリに移動して無事、pg_dumpが実行できました。ちなみに、ダンプのformatは上記の例ではcustomとあるのですが、これだとpostgresqlにしたロードできないのでは?と思いまし--formatを無指定にするとSQLで書き出せるようでしたので、そのようにした次第です。

ダンプされたテキストファイルをみると確かにSQLで書かれていました。バイナリデータもエンコーディングされていたので大丈夫だと思います。

はい、とりあえずここまでで。sqlite3に読み込むにはどうしたものか。。。という感じですが、最悪は、ローカルにいれたpostgresqlをDBにしてrailsを起動すればいいので問題はないという感じです。とりあえず問題解決です。

では、今日も蒸し暑いですが頑張っていきましょう👍