为什么我无法扩展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或角色,或者我错了吗?

+2

我觉得你的GRANT是不正确的......这是格兰特·yourdbname未使用者的所有权限* TO *您的用户* – user3012759

+0

@ user3012759非常感谢您,我的学生男孩出错。如果你想添加这个作为答案,我会高兴地接受它 – jonnie

你的GRANT语法不太对 - https://www.postgresql.org/docs/9.0/static/sql-grant.html

总之应该是这样的:

GRANT ALL PRIVILEGES ON yourdbname not user TO your user;