sql - 使 postgreSQL 脚本可配置

标签 sql postgresql shell config

我创建了一个 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/

相关文章:

sql - 如何将远程 SQL Server 数据库备份到本地驱动器?

mysql - 在 mysql shell 中显示没有表格行的查询结果(非表格输出)

database - 为什么我有针对唯一索引的非唯一条目? (PostgreSQL 9.0)

mysql - 事务管理超时问题

postgresql 在同一张表上连接表,直到没有更多数据可返回

database - Postgresql 执行自定义函数时出现错误 42883

shell - 读到空格

LINUX:如何软链接(soft link)所有子目录中的特定文件

linux - 在 Bash 中,如何显示脚本输出然后恢复到之前的输出(如 less、top 或 watch)

mysql - If then join else 其他加入