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

$ 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也这么做.应用程序,也是这么说的,

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

推荐答案

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

$ lsof -n -i:5432 | grep LISTEN

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

$ pg-stop

然后我可以毫无问题地连接到Docker实例.

Edit (2019/07/02)

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

通常通过docker运行、使用python并连接到postgres数据库需要通过pip3 install psycopg2安装psycopg2,但如果运行此命令,您将获得:

Error: pg_config executable not found.

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

yum install postgresql-devel
apt-get install postgresql-client

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

brew install postgresql

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

Database相关问答推荐

如何在保持相同 Flyway 校验和的同时更正语法?

华为Appcube中的对象字段类型

在 SQL Server 中找出调用存储过程

Postgresql:优化数字字段的列大小

数据库模式 - location

如何在 MS Access 中实现 SQL INTERSECT 和 MINUS 操作

MongoDB:查询具有两个相等字段 $match 和 $eq 的文档

SQL 历史(history)表设计

SQLite 中内存数据库的优势

单向和双向关系关系的区别

行之间的 SQL 差异

Mysql用户创建脚本

为 Java servlet 管理数据库连接的最佳方法

具有多列的单个固定表与灵活的抽象表

Select * 和 Select [列出每个列] 之间有区别吗

如何取消长时间运行的数据库操作?

如何将sqlite表从磁盘数据库复制到python中的内存数据库?

MongoDB 是否支持浮点类型?

Oracle order NULL LAST 默认

为什么 Rails 迁移在应用程序中定义外键而不在数据库中定义外键?