[Docker / python / postgresql] psycopg2-binary をインストールしようとして Error: pg_config executable not found. が発生した場合

# 症状

pipモジュールの`psycopg2-binary`をpip installしようとした時に、以下のエラーが発生

```bash
Collecting asgiref==3.5.0
  Downloading asgiref-3.5.0-py3-none-any.whl (22 kB)

...

Collecting pillow==9.0.1
  Downloading Pillow-9.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.3 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.3/4.3 MB 14.0 MB/s eta 0:00:00
Collecting psycopg2-binary==2.9.3
  Downloading psycopg2_binary-2.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.0 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.0/3.0 MB 14.6 MB/s eta 0:00:00
Collecting psycopg2==2.9.3
  Downloading psycopg2-2.9.3.tar.gz (380 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 380.6/380.6 KB 6.2 MB/s eta 0:00:00
  Preparing metadata (setup.py): started
  Preparing metadata (setup.py): finished with status 'error'
  error: subprocess-exited-with-error

  × python setup.py egg_info did not run successfully.
  │ exit code: 1
  ╰─> [23 lines of output]
      running egg_info
      creating /tmp/pip-pip-egg-info-jcptnq3_/psycopg2.egg-info
      writing /tmp/pip-pip-egg-info-jcptnq3_/psycopg2.egg-info/PKG-INFO
      writing dependency_links to /tmp/pip-pip-egg-info-jcptnq3_/psycopg2.egg-info/dependency_links.txt
      writing top-level names to /tmp/pip-pip-egg-info-jcptnq3_/psycopg2.egg-info/top_level.txt
      writing manifest file '/tmp/pip-pip-egg-info-jcptnq3_/psycopg2.egg-info/SOURCES.txt'

      Error: pg_config executable not found.

      pg_config is required to build psycopg2 from source.  Please add the directory
      containing pg_config to the $PATH or specify the full executable path with the
      option:

          python setup.py build_ext --pg-config /path/to/pg_config build ...

      or with the pg_config option in 'setup.cfg'.

      If you prefer to avoid building psycopg2 from source, please install the PyPI
      'psycopg2-binary' package instead.

      For further information please check the 'doc/src/install.rst' file (also at
      <https://www.psycopg.org/docs/install.html>).

      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed

× Encountered error while generating package metadata.
╰─> See above for output.

note: This is an issue with the package mentioned above, not pip.
hint: See above for details.
ERROR: Service 'web' failed to build : The command '/bin/sh -c pipenv lock -r --dev > requirements.txt     && pip install -r requirements.txt' returned a non-zero code: 1
```

気になるエラーメッセージはこれ

```bash
Error: pg_config executable not found.
```

このキーワードを色々組み合わせて、対処法を探した。

# 環境

|項目|versionなど|
|:--|:--|
|docker|Docker version 20.10.8, build 3967b7|
|docker image|python:3.9-slim|
|python|3.9.7|
|psycopg2|2.9.3|
|psycopg2-binary|2.9.3|


# 対処法

結果として、この記事に従ったところ、解決した。

https://gankrin.org/how-to-fix-pg_config-executable-not-found-in-python/

ただ、英語で書かれているのと、なかなか見つからなかったので日本語で記事にしておいた。

## 変更箇所

具体的には、ubuntu系のdocker imageを使っているのであれば、`libpq-dev`をapt-get installすることで解決する。

```Dockerfile:Dockerfile
RUN apt-get -y install \
    # For psycopg2 (postgresql client)
    libpq-dev
```

これでOK。

ただし、alpine系のimageでは恐らくこの方法では対応できないので注意。