我正在尝试设置PostgreSQL Docker容器。我想在启动时创建一个模式,并将search_path
设置为该模式
我已经创建了一个初始化的.sql文件,并将其复制到/docker-entrypoint-initdb.d/
文件夹,该文件夹由容器启动时的docker-entrypoint.sh
文件执行。入口点文件来自the official docker library repo
此.sql文件包含以下代码:
CREATE SCHEMA solwa_dev;
SET search_path TO solwa_dev;
-- table creations, sequences, other commands
一切都正常执行,但在初始化完成后search_path
没有相应设置。如果我在终端输入:
docker exec -it <docker_container> psql -U postgres -c "show search_path;"
显示"$user", public"
。在对SET search_path TO solwa_dev;
使用相同的命令后,它仍然显示$ user和public schemas,但没有solwa_dev架构!
为什么会发生这种情况?如何解决这个问题?
答案 0 :(得分:1)
运行SET search_path ..
只会为当前打开的会话设置搜索路径。
要永久设置,您可以在角色级别执行此操作:
ALTER ROLE <role> SET search_path TO ...
数据库级别:
ALTER DATABASE <db> SET search_path TO ...
或系统范围内的postgresql.conf中的search_path
setting
有关详细信息,请参阅this answer。