У меня есть запрос PostgreSQL, который я хотел бы выполнить для нескольких географических областей через цикл.Я хочу использовать элементы в массиве, чтобы изменить запрос и имя файла CSV, в который я экспортирую данные.По сути, я хочу, чтобы запрос выполнялся на ... cwa = 'MFR' ... и экспортировался в hourly_MFR.csv, затем выполнялся на ... cwa = 'PQR' ... и экспортировался в hourly_PQR.csv,и так далее.
Вот что у меня так далеко.Я подумал, что, возможно, EOF в сценарии может вызывать проблемы, но я не мог понять, как заставить цикл работать, сохраняя общий формат сценария.
Кроме того, запрос / скрипт без циклов (исключая операторы объявления, выполнения, выполнения) работает нормально.
dbname="XXX"
username="XXXXX"
psql $dbname $username << EOF
declare -a arr=('MFR', 'PQR', 'REV')
for i in "${arr[@]}"
do
\COPY
(SELECT d.woyhh,
COALESCE(ct.ct, 0) AS total_count
FROM
(SELECT f_woyhh(d::TIMESTAMP) AS woyhh
FROM generate_series(TIMESTAMP '2018-01-01', TIMESTAMP '2018-12-31', interval '1 hour') d) d
LEFT JOIN
(SELECT f_woyhh((TIME)::TIMESTAMP) AS woyhh,
count(*) AS ct
FROM counties c
JOIN ltg_data d ON ST_contains(c.the_geom, d.ltg_geom)
WHERE cwa = $i
GROUP BY 1) ct USING (whh)
ORDER BY 1) TO /var/www/html/GIS/ltg_db/bigquery/hourly_$i.csv CSV HEADER;
done
EOF
Спасибо за любую помощь!