Postgres sql文件似乎没有完成

时间:2015-03-24 21:01:46

标签: postgresql schema docker

我正在使用postgres docker镜像来创建用于开发的本地数据库。该映像的一个特性是目录中的任何shell脚本都将在启动时运行,我使用它来设置我的架构和用户。一切都非常适合创建我的架构和用户完全访问它,但是当我创建一个只读用户时,事情似乎不起作用。该脚本似乎突然停止,但未授予我请求的只读访问权限。它不是语法问题,因为我可以使用psql连接到数据库并复制粘贴完美的命令。

运行目录中任何sql文件的shell脚本,现在只有一个。

for sql in /docker-entrypoint-initdb.d/*.sql
do
    gosu postgres postgres --single < $sql
done

运行的实际sql文件(连接详细信息已编辑)

-- Main user with full access to its schema
CREATE SCHEMA s;
CREATE USER u PASSWORD 'p';
GRANT ALL ON SCHEMA s TO u;
GRANT ALL ON ALL TABLES IN SCHEMA s TO u;


-- Readonly user
CREATE USER readonly PASSWORD 'r';

-- THE FOLLOWING DOESN'T SEEM TO RUN
-- Allows read on everything in schema s
GRANT USAGE ON SCHEMA s TO readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA s TO readonly;

它的最后两个命令似乎无法运行。我可以与用户联系&#39; readonly&#39;但会在架构上获得权限错误#39;直到我使用psql重新运行数据库上的最后两个命令。

日志不包含错误或警告

1 个答案:

答案 0 :(得分:1)

在我输入这个答案时,我刚刚发现你的帖子 - 单个命令行没有引用数据库。架构设置是否可能发生在&#39; postgres&#39;数据库,当你真的想要它在你的目标数据库中时!?!无论如何,从引用的SO答案中,在多用户模式下进行此设置可能是个好主意。我做那样的事情:

echo "Starting PostgreSQL server..."
/etc/init.d/postgresql start

for sql in /docker-entrypoint-initdb.d/*.sql
do
    gosu postgres psql -Upostgres -h $(hostname -i) -f ${sql} ${DB_NAME}
done

echo "Done with initialization ... database "$DB_NAME" is ready to use"

/etc/init.d/postgresql stop

当然你必须担心这里的pg_hba访问方法。在我的环境中,我信任来自私人IP地址YMMV的连接。 -g

相关问题