例えば、数 GB ある CSV ファイルをローカルマシンで雑に集計したいときは Excel や Pandas だとちょっと厳しかったりするので、PostgreSQL みたいな RDBMS にツッコんで SQL でやりたい。
雑にサーバに立てる方法といえば Docker 。
PostgreSQL は Docker Hub に公式イメージがあるので安心して使えて便利。
しかし使うたびに「オプション何指定したら良いんだっけ」となるので備忘録として手順をまとめておく。
詳しいことはすべて Docker Hub のページに書いてあるのでそこを読めば分かる。
注意点として、今回は雑にサーバ立てる場合の解説なので、アプリケーションを作る場合はちゃんと docker-compose.yml を書いたほうがいいと思う。
コンテナを起動する
$ docker run --rm -d \
    -p 15432:5432 \
    -v postgres-tmp:/var/lib/postgresql/data \
    -e POSTGRES_HOST_AUTH_METHOD=trust \
    postgres:12-alpine
- コンテナの停止時には削除する (--rm)- ボリュームにデータを保存する設定 (後述) なので、コンテナは消えても問題ない
 
- ホスト側のポートは適当に 15432にした (ご自由に)
- ボリューム postgres-tmpを/var/lib/postgresql/dataにマウントする- ボリュームが存在しない場合は新規作成される
- データはこのボリュームに保存されるため、コンテナを削除しても保存したデータは削除されない
- 環境変数 PGDATAを指定すればコンテナ内のデータディレクトリを変更できるが、特に変更する必要はないと思う
 
- パスワードなしでアクセスできる設定 (POSTGRES_HOST_AUTH_METHOD=trust)- もちろんセキュリティ的にはよくない設定なので、外部公開するサーバなどでやってはいけない
 
- イメージは 12-alpine(Alpine Linux ベースのバージョン 12 系最新) を使った
接続してみる
何らかの PostgreSQL クライアントを使って接続してみる。
psql コマンドを使うとこんな感じ。
$ psql -h localhost -p 15432 -U postgres
- 初回起動時に特に環境変数を指定しなかった場合は postgresというユーザとpostgresというデータベースが作成される
- 初回起動時に環境変数でパスワードを指定しなかった場合はパスワードなしで接続できるが、その場合は localhost以外からの接続はできない
