JavaScriptを有効にしてください

[Heroku] Dockerコンテナ上のpsqlにpg:pullする

 ·  ☕ 2 min read

はじめに

  • 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のバージョンを一致させる
    • ローカル = Dockerコンテナではなくホスト
  • 今回はリモートのpsqlがv13.5なので, ローカルもv13.xを使用する
    • 複数のversionを扱いたいなら, シンボリックリンクを貼り直しましょう
共有

YuWd (Yuiga Wada)
著者
YuWd (Yuiga Wada)
機械学習・競プロ・iOS・Web