我正在尝试通过 bash 脚本从 psql 复制数据现在我陷入了循环我的 bash 脚本如下:
#!/bin/bash
DATEBEGIN=2016-03-01
DATEEND=2016-03-31
DATEMONTH=2016-03
echo "Copy data to /mnt/bigstorage/samples-$DATEMONTH.csv file, please wait..."
psql postgresql://XXX:XXX@localhost/XXX << EOF
COPY (SELECT *
FROM sample
WHERE timestamp >= '$DATEBEGIN' AND
timestamp <= '$DATEEND') TO '/mnt/bigstorage/backup/samples$DATEMONTH.csv' DELIMITER ',' CSV;
EOF
使用上面的脚本,我需要每次更改月份,因为我们需要复制直到 2022 年的数据,我该如何循环日期?例如每月,但每天也可以。
通过以下脚本我得到了日期列表但我不知道如何实现这是我的脚本
start=2016-01-01
end=2022-01-01
while ! [[ $start > $end ]]; do
echo $start
start=$(date -d "$start + 1 day" +%F)
done
答案1
不知道我是否理解正确了这个问题,但你可以做这样的事情:
#!/bin/bash
start=2016-01-01
end=2022-01-01
while ! [[ $start > $end ]]; do
DATEBEGIN="$start"
start=$(date -d "$DATEBEGIN + 1 Month" +%F)
DATEEND=$(date -d "$start - 1 Day" +%F)
DATEMONTH=$(date -d "$DATEBEGIN" +%Y-%m)
echo "Copy data to /mnt/bigstorage/samples-$DATEMONTH.csv file, please wait..."
psql postgresql://XXX:XXX@localhost/XXX << EOF
COPY (SELECT *
FROM sample
WHERE timestamp >= '$DATEBEGIN' AND
timestamp <= '$DATEEND') TO '/mnt/bigstorage/backup/samples$DATEMONTH.csv' DELIMITER ',' CSV;
EOF
done