【问题标题】:How do I pass an environment variable into a .sql file?如何将环境变量传递到 .sql 文件中?
【发布时间】:2019-11-08 08:46:46
【问题描述】:

我在 Dockerfile 中设置环境变量,我想在 .sql 文件中引用它。该文件位于/docker-entrypoint-initdb.d 中,因为initdb 将运行它。

如何传递环境变量? (例如SELECT * FROM $myEnvironmentVariableHere;

【问题讨论】:

  • 如果您希望该变量在select 上运行,那么它与sql 文件无关,但与SYS ENV 无关

标签: postgresql docker environment-variables


【解决方案1】:

有几种方法可以做到这一点,但最简单的可能是使用带有 HEREDOC 的简单 shell 脚本:

这是脚本,在 scripts/test.sh 中调用

#!/bin/bash

psql << EOF
SELECT * FROM $MYVAR LIMIT 1;
EOF

运行方法如下:

docker run --rm  --name test_pg -v $PWD/scripts:/docker-entrypoint-initdb.d -e "MYVAR=pg_class" postgres:latest

在各种启动消息中,您会看到以下几行:

/usr/local/bin/docker-entrypoint.sh: sourcing /docker-entrypoint-initdb.d/test.sh
   relname    | relnamespace | reltype | reloftype | relowner | relam | relfilenode | reltablespace | relpages | reltuples | relallvisible | reltoastrelid | relhasindex | relisshared | relpersistence | relkind | relnatts | relchecks | relhasoids | relhasrules | relhastriggers | relhassubclass | relrowsecurity | relforcerowsecurity | relispopulated | relreplident | relispartition | relrewrite | relfrozenxid | relminmxid |           relacl            | reloptions | relpartbound
--------------+--------------+---------+-----------+----------+-------+-------------+---------------+----------+-----------+---------------+---------------+-------------+-------------+----------------+---------+----------+-----------+------------+-------------+----------------+----------------+----------------+---------------------+----------------+--------------+----------------+------------+--------------+------------+-----------------------------+------------+--------------
 pg_statistic |           11 |   11319 |         0 |       10 |     0 |        2619 |             0 |       16 |       398 |            16 |          2840 | t           | f           | p              | r       |       26 |         0 | f          | f           | f              | f              | f              | f                   | t              | n            | f              |          0 |          562 |          1 | {postgres=arwdDxt/postgres} |            |
(1 row)

【讨论】:

  • 我想从我的容器中运行 .sql 文件(例如psql -U user -d database -a -f file.sql
  • 为什么它必须是 sql 文件而不是容器内运行的 bash 文件?
  • 所以我可以psql -U user -d database -a -f scripts/test.sh?
  • 不,对 psql 的调用在脚本中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-24
  • 2018-04-09
  • 2022-08-17
  • 2023-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多