我创建了一个 SQL 脚本来从数据库中删除一个表,其中的记录早于 7 天,具有以下架构。
删除.sql
DELETE from abc where eventtime::date <=(CURRENT_TIMESTAMP-INTERVAL '7 DAYS')::date;
COMMIT;
我正在使用我的 shell 脚本执行上述 sql 脚本,如下所示:
xyz.sh
sudo -u user psql --d db --file=<<path>>/delete.sql
现在,我必须使这个脚本可配置,即用户可以更改脚本可以直接读取的持续时间,而不是总是更改脚本。因此,我尝试创建一些 .config 文件 并将其用作 sql 脚本中的引用。但我做不到。有关如何将变量从 .config 文件传递到 postgreSQL 脚本文件的任何帮助。
预期场景:
.config 文件
# duration to delete the records from the database
DURATION =7 DAY
删除.sql
DELETE from abc where eventtime::date <=(CURRENT_TIMESTAMP-INTERVAL '$DURATION')::date;
COMMIT;
提前致谢。
最佳答案
编辑:postgres 内置了对脚本中参数的支持(-v
标志)。请参阅下面的答案。
在xyz.sh中:
#!/usr/bin/env bash
. ./.config
sudo -u user psql -d db -c "DELETE FROM abc WHERE eventtime::DATE <=(CURRENT_TIMESTAMP - INTERVAL '${DURATION} days')::DATE"
您必须在 .config 文件中引用持续时间,因为其中有空格:
# Interval in the past to keep
DURATION="7 DAY"
如果您想将脚本保存在单独的文件中,则必须在将其提供给 psql
之前对其进行标记替换。可以使用像 sed
这样的实用程序:
在xyz.sh中:
#!/usr/bin/env bash
. ./.config
cat delete.sql | sed -e "s/DURATION/${DURATION}/g" | sudo -u user psql -d db
关于sql - 使 postgreSQL 脚本可配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50539416/