我为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;
我的计划是使用这个数据库上的docker与Django,所以首先要检查我可以连接,但我不能。
$ 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
我对www.example.com做了同样的PSequal.app事情,说了同样的话,我在Mac高塞拉上运行。
为什么我会得到这个错误?角色存在,或者至少在我看来...
3条答案
按热度按时间slhcrj9b1#
问题很简单,我的计算机已经在运行一个Postgres示例,我不知道它还在
:5432
上运行(不在Docker内部),检查:我记得我是通过https://gist.github.com/sgnl/609557ebacd3378f3b72安装的,我运行了
然后,我连接到Docker示例没有问题。
编辑(2019年7月2日)
这个问题最近通过了1万次浏览,所以我想我应该更详细地说明为什么会发生这种情况。
通常通过docker运行,使用python并连接到postgres数据库需要您通过
pip3 install psycopg2
安装psycopg2
,但如果您运行此命令,您将获得:这是因为psycopg2需要操作系统安装postgres库:
现在,在Mac上,您需要对brew执行相同的操作:
有一件事我没有意识到,是在Mac上,做上述操作不仅会安装所需的库,而且还启动
:5432
上的数据库。因为这一切都是在后台完成的,所以我没有想到这是问题所在,因为没有常见的错误弹出通知端口正在使用等。mnemlml82#
在我的例子中,这个问题也可能是由于使用了一个不是postgres的超级用户。开发人员在geOrchestra docker组合中选择了用户georchestra。
因此,您必须使用选项“-U georchal”来连接到容器。
当然,尝试连接用户postgres会导致错误:
llycmphe3#
在我的例子中,这个命令帮助我: