postgres 用の docker コンテナをダウンロードしました:https://hub.docker.com/r/library/postgres/、そして次のことを行いました。
$ docker run --name satgres -e POSTGRES_PASSWORD=mysecretpassword -d -p 5432:5432 postgres
satgres | "docker-entrypoint.s…" | 5 seconds ago | Up 6 seconds | 0.0.0.0:5432->5432/tcp | satgres
$ docker exec -it c8f1b22cc41e /bin/bash
# psql -U postgres
psql (10.1)
postgres=# CREATE DATABASE mytest;
postgres=# \password postgres
postgres=# CREATE ROLE ming WITH LOGIN PASSWORD 'pass1234';
postgres=# ALTER ROLE ming CREATEDB;
postgres=# CREATE DATABASE sjk;
postgres=# GRANT ALL PRIVILEGES ON DATABASE youtube TO ming;
postgres=# \connect sjk
youtube=# ALTER ROLE ming lOGIN;
私の計画は、Django を使用して docker 上でこのデータベースを使用することです。そのため、まず接続できるかどうかを確認したいのですが、できません。
$ psql -h localhost -p 5432 -U postgres
$ psql: FATAL: role "postgres" does not exist
$ psql -h localhost -p 5432 -U ming
$ psql: FATAL: role "ming" does not exist
PSequal.app でも同じことを行いますが、同じ結果になります。私は Mac High Sierra で実行しています。
なぜこのエラーが発生するのでしょうか? ロールは存在します。少なくとも私にはそう思えます...
ベストアンサー1
問題は単純で、私のコンピューターではすでに Postgres のインスタンスが実行されていましたが、それがまだ実行されていることに気づいていませんでした (Docker 内ではなく)。次のコマンド:5432
で確認しました。
$ lsof -n -i:5432 | grep LISTEN
そこで、私がインストールした方法を思い出しましたhttps://gist.github.com/sgnl/609557ebacd3378f3b72、私は走った
$ pg-stop
そして、Docker インスタンスへの接続に問題は発生しませんでした。
編集 (2019/07/02)
この質問は最近 10,000 回の閲覧回数を超えたので、なぜこのようなことが起こったのかを詳しく説明する必要があると思いました。
通常、docker 経由で実行し、python を使用して postgres データベースに接続するには、psycopg2
経由でをインストールする必要がありますpip3 install psycopg2
が、このコマンドを実行すると次のようになります。
Error: pg_config executable not found.
これは、psycopg2 では postgres ライブラリのオペレーティング システムのインストールが必要であるためです。
yum install postgresql-devel
apt-get install postgresql-client
さて、Mac では、brew を使用して同じことを行う必要があります。
brew install postgresql
私が気づかなかったことの1つは、Macでは上記の操作を行うと必要なライブラリがインストールされるだけでなく、またでデータベースを起動します:5432
。これはすべてバックグラウンドで実行されたため、ポートが使用されていることなどを通知する通常のエラーは何も表示されず、これが問題であるとは思いませんでした。