我正在使用下一个Dockerfile来设置postgres数据库引擎
FROM postgres:9.6.5
ENV POSTGRES_USER postgres
ENV POSTGRES_PASSWORD xxx
ENV POSTGRES_DB postgres
ADD localDump.sql /docker-entrypoint-initdb.d
我需要在初始化数据库之前和运行localDump.sql脚本之前创建ROLE CREATE ROLE read_only; 。
那么如何直接在Dockerfile中运行SQL脚本呢?
答案 0 :(得分:3)
======================== 正确答案开始 ============= ===========
根据Postgres图像文档,您可以通过运行脚本或SQL文件来扩展原始图像。
如果您想在从这个派生的图像中进行其他初始化,请在/docker-entrypoint-initdb.d下添加一个或多个* .sql,* .sql.gz或* .sh脚本(创建目录,如有必要)。在入口点调用initdb创建默认的postgres用户和数据库之后,它将运行任何* .sql文件,并在该目录中找到任何* .sh脚本,以便在启动服务之前进行进一步的初始化。
对于你的Dockerfile,你可以这样做。
FROM postgres:9.6.5
ENV POSTGRES_USER postgres
ENV POSTGRES_PASSWORD xxx
ENV POSTGRES_DB postgres
ADD create-role.sh /docker-entrypoint-initdb.d
ADD localDump.sql /docker-entrypoint-initdb.d
您还需要create-role.sh脚本来执行plsql命令
#!/bin/bash
set -e
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" <<-EOSQL
CREATE ROLE read_only;
EOSQL
请注意,我不是SQL DBA,plsql命令只是一个例子。
======================== 正确答案结束 ============= ===========
为后代留下的原始答案:
您可以使用psql
吗?这样的事情。
FROM postgres:9.6.5
ENV POSTGRES_USER postgres
ENV POSTGRES_PASSWORD xxx
ENV POSTGRES_DB postgres
RUN psql -U postgres -d database_name -c "SQL_QUERY"
ADD localDump.sql /docker-entrypoint-initdb.d
您应该找到如何从bash运行Postgres的SQL查询,然后在Dockerfile中添加RUN指令。