为什么我无法扩展docker postgres映像来创建额外的数据库和用户
问题描述:
我在docker容器中使用docker postgres 9.4.5图像并使用init.sh将其扩展为复制到/docker-entrypoint-initdb.d
。我正在尝试创建另一个数据库和一个非管理员用户,以访问我所创建的第二个数据库$POSTGRES_DB
。 我尝试以下,其中$POSTGRES_USER
是用户myadmin
和$POSTGRES_DB
是通过码头工人,撰写环境通过数据库mydb1
:为什么我无法扩展docker postgres映像来创建额外的数据库和用户
#!/bin/bash
set -e
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" <<-EOSQL
CREATE USER userx WITH password '$POSTGRES_PASSWORD';
CREATE DATABASE diagnostics;
GRANT ALL PRIVILEGES ON DATABASE userx TO $POSTGRES_DB;
GRANT ALL PRIVILEGES ON DATABASE userx TO mydb2;
EOSQL
这给了我一个错误:
postgres_1 | CREATE DATABASE
postgres_1 |
postgres_1 | CREATE ROLE
postgres_1 |
postgres_1 |
postgres_1 | /docker-entrypoint.sh: running /docker-entrypoint-initdb.d/init-user-db.sh
postgres_1 | FATAL: database "myadmin" does not exist
postgres_1 | psql: FATAL: database "myadmin" does not exist
docker_postgres_1 exited with code 2
然后,我--username postgres
试了一下现在得到错误
ERROR: database "userx" does not exist
然后我试图创建数据库用户X: #/斌/庆典 集-e
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" <<-EOSQL
CREATE DATABASE userx;
CREATE USER userx WITH password '$POSTGRES_PASSWORD';
CREATE DATABASE diagnostics;
GRANT ALL PRIVILEGES ON DATABASE userx TO $POSTGRES_DB;
GRANT ALL PRIVILEGES ON DATABASE userx TO mydb2;
EOSQL
,但得到:
postgres_1 | CREATE DATABASE
postgres_1 | ERROR: role "mydb1" does not exist
postgres_1 | STATEMENT: GRANT ALL PRIVILEGES ON DATABASE rwx TO analytics;
postgres_1 | ERROR: role "mydb2" does not exist
docker_postgres_1 exited with code 3
能有人帮,这对我来说是一个真正的拦截,我不知道如何继续,因为我觉得我不应该创建数据库userx或角色,或者我错了吗?
答
你的GRANT语法不太对 - https://www.postgresql.org/docs/9.0/static/sql-grant.html
总之应该是这样的:
GRANT ALL PRIVILEGES ON yourdbname not user TO your user;
我觉得你的GRANT是不正确的......这是格兰特·yourdbname未使用者的所有权限* TO *您的用户* – user3012759
@ user3012759非常感谢您,我的学生男孩出错。如果你想添加这个作为答案,我会高兴地接受它 – jonnie