【发布时间】:2021-01-12 09:52:29
【问题描述】:
我正在尝试通过 Docker 连接到我的 postgres 数据库。我已经确认它正在运行(端口 5432)以及我的名为 Adminer 的数据库管理器工具(端口 8080)。到目前为止一切顺利!
接下来,我尝试进行数据库迁移。 (这里是Makefile)通过运行以下命令:
仅供参考,migrate 是 Golang 的数据库迁移工具
migrate -source file://migrations -database postgres://postgres:secret@localhost:5432/syndicate?sslmode=disable up
我的数据库 URL 签出:
dbdriver://username:password@host:port/dbname?param1=true&param2=false
但收到此错误:
error: pq: role "postgres" does not exist
这是我所知道的:
- 数据库名称为
syndicate(database.env) - 默认数据库用户是
postgres(database.env) - 密码是
secret(database.env)
为什么默认的 postgres 用户需要角色?
我创建了这个issue,并在收到来自各种平台的反馈时一直在叙述它。这是我完整的repo
最后一件事......
我能找到的唯一与我的问题相似的是这个文档,PostgreSQL 1.3. Creating a Database 声明:
另一个回应可能是这样的:
createdb: could not connect to database postgres: FATAL: role "joe" does not exist
提及您自己的登录名的地方。如果管理员没有为您创建 PostgreSQL 用户帐户,就会发生这种情况。 (PostgreSQL 用户帐户不同于操作系统用户帐户。)如果您是管理员,请参阅第 18 章以获取创建帐户的帮助。您需要成为安装 PostgreSQL 的操作系统用户(通常是 postgres)才能创建第一个用户帐户
就是这样,谢谢!
编辑: 按照建议,我向database.env 添加了一个 POSTGRES_USER:
POSTGRES_PASSWORD=secret
POSTGRES_DB=syndicate
POSTGRES_USER=user
database.env 在docker-compose.yml中被引用:
version: '3.1'
services:
adminer:
image: adminer
restart: always
ports:
- 8080:8080
db:
image: "postgres"
env_file:
- database.env # configure postgres
ports:
- 5432:5432
现在收到错误:
error: pq: role "user" does not exist
【问题讨论】:
-
"go" 和 "golang-migrate" 是不相关的标签。
-
我删除了标签,谢谢
-
你能用psql连接吗?试试
psql -h localhost -U user -d syndicate -
收到同样的错误,好像数据库不存在一样。我可以确认我正在运行本地映像
-
请粘贴以下输出:a)
docker-compose psb)docker psc)ps -ef | grep postgresd)docker inspect <container id>
标签: postgresql docker docker-compose