LoginSignup
0
0

PostgreSQLのDBサーバーがよく分かってなかった話

Posted at

Docker上でpostgresのコンテナを建てる

PostgreSQLをインストール済みのMacbook Proにて、Rancher Desktopを用いてdockerコンテナ上にpostgresのDBサーバーを建てようとした。

dockerコマンド
$ docker run -d --name postgres_postgresdb -e POSTGRES_USER=user -e POSTGRES_PASSWORD=pass -e POSTGRES_DATABASE=postgresdb -e POSTGRES_INITDB_ARGS="--encoding=UTF-8" -p 5432:5432 postgres

上のコマンドを実行した結果、正常にdockerコンテナが作成されたのを$ docker psにて確認した。

じゃあ中に入ってみるか。
$ psql postgres://user:pass@localhost:5432/postgresdbでDBにアクセスすると、以下のエラーが出た。

出たエラー
psql: エラー: "localhost"(127.0.0.1)、ポート5432のサーバーへの接続に失敗しました: FATAL:  role "user" does not exist

あれ?dockerコマンドの引数でuserを指定したよな…
POSTGRES_USERじゃなくてPG_USERだったっけ?と思って変えてみたけど結果は同じ。

何も考えずにおかしな方向へfixを試みる

エラーコードでググってみたらuser追加しろとかDB追加しろとか言われた

ググった結果出てきたやつ:
https://stackoverflow.com/questions/15301826/psql-fatal-role-postgres-does-not-exist
https://stackoverflow.com/questions/17633422/psql-fatal-database-user-does-not-exist

user作成のコマンド
$ /opt/homebrew/Cellar/postgresql@15/createuser -s user

注意
createuserの存在するディレクトリは、postgresのインストール方法やバージョンにより異なる。
上のコマンドを使ってuser作成を行う場合は$ which postgresなどを用いてインストールディレクトリを確認すること。

何も考えずにコマンドを実行…
見かけ上は接続できて喜んでたけど
このあたりで「これってローカルで建ってるサーバーに対して操作行ってるじゃん」と気づく。

試しに$ docker rm -f postgres_postgresdbしたら、コンテナを終了・削除しているのにDBへ接続できてしまった。

原因:思考停止

結局のところ、homebrew経由でpostgresが実行されていたため、ローカルですでにpostgresのDBサーバーが建っていた。

$ brew services list
Name          Status  User          File
postgresql@15 started user          ~/Library/LaunchAgents/homebrew.mxcl.postgresql@15.plist

$ brew services stop postgresした結果、dockerのコンテナで建ってるpostgresに無事アクセスできた。最初の$ docker run -d [なんたら]コマンドは何も間違ってなかった。

ローカルでサーバーが建っているって感覚なかったなぁ…。
言われてみりゃその通りだが…。
そしてpostgresDBをローカルで建てるためにいらんコンピュータリソースを使ってたんだなぁと恥ずかしくなった。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0