我正在使用下一个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/

10-14 11:57
查看更多