【发布时间】:2023-04-07 10:27:01
【问题描述】:
我正在使用 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;
最后两个命令似乎没有运行。我可以与用户“只读”连接,但在使用 psql 重新运行数据库上的最后两个命令之前,模式“s”上会出现权限错误。
日志不包含错误或警告
【问题讨论】:
-
这真的很奇怪。您可以执行该图像并运行 gosu postgres postgres --single
-
是的,来自 postgres 的日志与 docker 日志一起出现。我可以看到数据库启动并且可以看到数据库正在被更改,但没有错误或问题迹象。我尝试在容器上运行 exec 以重新运行文件,但它给了我一个错误,提示“锁定文件“postmaster.pid”已经存在”
-
也许你可以用 bash 执行,关闭 postmaster,然后尝试运行脚本?也许问题出在单用户模式上?我去看了我的数据库启动脚本,我使用多用户模式在 docker 中“初始化”数据库。这很有趣...stackoverflow.com/questions/28244869/…
-
感谢其他问题的链接。看起来真正的问题是,虽然他们建议使用单用户模式,但实际上并没有实际工作。我有一个用于在远程服务器上运行脚本的 psql 包装器,我已经对其进行了修改以满足我对本地服务器的需求
标签: postgresql schema docker