我使用docker postgres 9.4.5图像并使用复制到docker容器中的/docker-entrypoint-initdb.d
的init.sh进行扩展。我正在尝试创建另一个数据库和一个非管理员用户,作为$POSTGRES_DB
以及我正在创建的第二个数据库的访问权限。
我尝试了以下操作:$POSTGRES_USER
是用户myadmin
,而$POSTGRES_DB
是通过docker-compose环境传递的数据库mydb1
:
#!/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
然后我尝试创建数据库userx: #!/斌/庆典 设置-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或角色,或者我错了吗?
答案 0 :(得分:2)
您的GRANT语法不太正确 - https://www.postgresql.org/docs/9.0/static/sql-grant.html
总之应该是这样的:
GRANT ALL PRIVILEGES ON yourdbname not user TO your user;