Postgres的sql文件似乎没有完成

我正在使用postgres docker镜像来创build一个本地数据库进行开发。 该映像的一个function是,目录中的任何shell脚本将在启动时运行,我使用它来设置我的架构和用户。 一切都很好,创build我的模式和用户完全访问它,但是当我创build一个只读用户的东西似乎并没有工作。 该脚本似乎突然停止不授予只读访问我的请求。 它不是一个语法问题,因为我可以使用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; 

它最后两个似乎不运行的命令。 我可以连接用户'只读',但会得到模式'的权限错误,直到我使用psql重新运行数据库上的最后两个命令。

日志不包含错误或警告

它发生在我身上,而input这个答案是你的postgres –single命令行不引用数据库。 模式设置是否可能在'postgres'数据库中发生,当你真的想要在你的目标数据库!!! 无论如何,从参考的答案,这可能是一个好主意,在多用户模式下进行此设置。 我会这样做:

 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