使用 Postgres for Docker 运行 pq 时出现“错误:pq:

我正在使用postgres:14-alpine image在 Docker 上设置本地 Postgres 数据库,并使用golang-migrate在其上运行数据库迁移,当我在运行该migrate工具后收到以下错误消息时:

error: pq: role "root" does not exist

我正在运行以下命令:

$ docker run --name postgres14 -p 5432:5432 -e POSTGRES_USER=root -e POSTGRES_PASSWORD=pass -d postgres:14-alpine

$ docker exec -it postgres14 createdb --user=root --owner=root demodb

$ migrate -path db/migrations -database postgresql://root:pass@localhost:5432/demodb?sslmode=disable --verbose up

也可以在这个 Makefile中查看这些命令,并且可以在这个存储库中找到完整的代码库。

以下是来自 Postgres 容器的日志:

The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale "en_US.utf8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".

Data page checksums are disabled.

我应该怎么做才能root正确配置角色?



慕无忌1623718
浏览 286回答 2
2回答

白猪掌柜的

docker image 文档指定环境POSTGRES_USER变量默认为postgres如果未设置,请尝试使用它代替root或删除容器并使用正确的环境变量再次构建它一旦你进入 psql shell,你就可以创建一个用户CREATE USER username WITH PASSWORD 'your_password';然后授予用户对特定数据库的访问权限:GRANT ALL PRIVILEGES ON DATABASE demodb TO username;完成后,您可以在 make 文件的连接字符串中使用用户

慕丝7291255

原来 Hombrew 在我的操作系统上安装和设置的 Postgres 服务器使用了相同的端口,这与在相同端口号下对容器化数据库发出的请求发生冲突。这个问题可以通过为容器化数据库使用不同的端口号,或者通过关闭操作系统上的数据库来解决。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go