我正在使用下一个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
我需要创建ROLE 。CREATE ROLE只读;在初始化我的数据库之前和运行localDump.sql脚本之前,使用。
那么如何在Dockerfile中直接运行SQL脚本呢?
最佳答案
======================== 正确答案开始 ===================== ===
根据Postgres图像文档,您可以通过运行脚本或SQL文件来扩展原始图像。
对于您的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命令只是一个示例。
======================== 正确答案End ===================== ===
后人留下的原始答案:
可以使用
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运行SQL查询Postgres的方法,然后在Dockerfile中添加RUN指令。
关于docker - 在Dockerfile中运行SQL脚本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46213968/