首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Postgresql Docker角色不存在

Postgresql Docker角色不存在
EN

Stack Overflow用户
提问于 2018-02-03 09:19:13
回答 2查看 55.6K关注 0票数 48

我下载了postgres:https://hub.docker.com/r/library/postgres/的docker容器,并执行了以下操作:

代码语言:javascript
复制
$ 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上使用这个数据库,所以首先想检查我是否可以连接,但我不能。

代码语言:javascript
复制
$ 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上运行。

为什么我会得到这个错误?这个角色是存在的,或者至少在我看来...

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-03 12:48:50

问题很简单,我的计算机已经在运行Postgres的一个实例,而我并不知道它仍然在:5432上运行(而不是在Docker内部),检查一下:

代码语言:javascript
复制
$ lsof -n -i:5432 | grep LISTEN

所以我记得我是通过https://gist.github.com/sgnl/609557ebacd3378f3b72安装的,我运行

代码语言:javascript
复制
$ pg-stop

然后我连接到Docker实例就没有问题了。

编辑(2019/07/02)

这个问题最近超过了10,000次点击量,所以我想我应该更详细地解释为什么会发生这种情况。

通常通过docker运行,使用python并连接到postgres数据库需要你通过pip3 install psycopg2安装psycopg2,但如果你运行这个命令,你会得到:

代码语言:javascript
复制
Error: pg_config executable not found.

这是因为psycopg2需要安装postgres库的操作系统:

代码语言:javascript
复制
yum install postgresql-devel
apt-get install postgresql-client

现在,在Mac上,您需要对brew执行相同的操作:

代码语言:javascript
复制
brew install postgresql

我没有意识到的一件事是,在Mac上,执行上述操作不仅会安装所需的库,而且还会在:5432上启动一个数据库。因为这一切都是在后台完成的,所以我没有想到这是问题所在,因为没有弹出任何常见的错误来通知端口正在使用,等等……

票数 94
EN

Stack Overflow用户

发布于 2018-10-12 17:35:10

在我的例子中,这个问题也可能是由于使用了一个不是postgres的超级用户。开发人员在georchestra docker组合中选择了用户地理乐团。从dockerfile中提取:

代码语言:javascript
复制
environment:
  - POSTGRES_USER=georchestra

HEALTHCHECK --interval=30s --timeout=30s \
  CMD pg_isready -U $POSTGRES_USER

因此,您必须使用选项"-U georchestra“来连接到容器。

代码语言:javascript
复制
$ docker exec -it docker_database_1 psql -U georchestra
psql (10.5 (Debian 10.5-1.pgdg90+1))
Type "help" for help.

当然,尝试与用户postgres连接会导致错误:

代码语言:javascript
复制
docker exec -it docker_database_1 psql -U postgres
psql: FATAL:  role "postgres" does not exist
票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48593016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档