はじめに
- Herokuでは,
pg:pull
を通してリモートからローカルへとテーブルを転送(pull)できる
- Dockerコンテナ上のpsqlへのpullに手こずったのでメモ
1
2
3
4
5
|
heroku pg:pull HEROKU_DB_NAME LOCAL_DB_NAME --app APP_NAME
heroku-cli: Pulling HEROKU_DB_NAME ---> LOCAL_DB_NAME
createdb: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: No such file or directory
Is the server running locally and accepting connections on that socket?
|
環境
- MacBook Pro 2018
- Mac OS BigSur version 11.5.1
- Heroku → Hobby Dynos
- Add-on → Heroku Postgres
問題1. ローカルのDBに接続できない問題
例えばこんな感じのdocker-compose.yml
があるとして,
1
2
3
4
5
6
7
8
9
10
|
version: '3'
services:
postgres:
image: 'postgres:9.6.1'
ports:
- '5433:5432'
environment:
POSTGRES_USER: 'test'
POSTGRES_PASSWORD: 'test'
POSTGRES_DB: 'test'
|
こんな感じのエラーが出る場合.
1
2
3
4
5
|
heroku pg:pull HEROKU_DB_NAME LOCAL_DB_NAME --app APP_NAME
heroku-cli: Pulling HEROKU_DB_NAME ---> LOCAL_DB_NAME
createdb: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: No such file or directory
Is the server running locally and accepting connections on that socket?
|
エラー文を見ると, "/tmp/.s.PGSQL.5432"
を介してドメインソケットでの通信を試みているようです. したがって, PGHOSTでlocalhostを指定してあげれば大丈夫でしょう.
solution
- 環境変数でホスト/ポート番号等をsetする.
- 例えば, 上のような
docker-compose.yml
なら, PGUSER=test PGPASSWORD=test PGHOST=127.0.0.1 PGPORT=5433
をsetして次のように叩く.
1
|
PGUSER=test PGPASSWORD=test PGHOST=127.0.0.1 PGPORT=5433 heroku pg:pull HEROKU_DB_NAME LOCAL_DB_NAME --app APP_NAME
|
問題2. psqlのバージョンが不一致
こんな感じのエラーが出る場合.
1
2
3
4
5
|
heroku-cli: Pulling postgresql-triangular-97123 ---> biblick
pg_dump: error: server version: 13.5 (Ubuntu 13.5-2.pgdg20.04+1); pg_dump version: 12.3
pg_dump: error: aborting because of server version mismatch
pg_restore: error: could not read from input file: end of file
▸ pg_dump errored with 1
|
手元のpsqlとリモートのそれとで, バージョンが一致してないようです. ということでバージョンを一致させましょう.
ちなみに, psqlを複数version扱いたいなら, シンボリックリンクを貼り直します. [参考]
solution
- リモートとローカルのpsqlのバージョンを一致させる
- 今回はリモートのpsqlがv13.5なので, ローカルもv13.xを使用する
- 複数のversionを扱いたいなら, シンボリックリンクを貼り直しましょう