
Я хочу сделать резервную копию базы данных с помощью psql
команды COPY
. Вот мой скрипт:
psql "user=${USERNAME} host=${HOSTNAME} dbname=${DBNAME} password=${PASSWORD}" -c \
"COPY (SELECT * FROM tbl) ORDER BY id ASC) TO STDOUT WITH CSV HEADER;" | \
bzip2 -z -f --best -c > /home/${DBNAME}-${FILENAME}.csv.bz2
Также я хочу узнать, сколько строк скопировано из базы данных, но в psql такой функции нет. Поэтому мне нужна внешняя команда. Мне нужно что-то вроде этого:
psql ... | wc -l | bzip2
Есть ли решение? Единственное решение, которое я нашел, это использовать fifo:
mkfifo /home/backup.fifo
psql ... | tee /home/backup.fifo | bzip2
Теперь из другого окна терминала я могу использовать wc
:
wc -l /home/backup.fifo
решение1
Оба bash
имеют zsh
особенность >(pipeline)
:
psql ... | tee >(wc -l) | bzip2
Обратите внимание, что >
здесь не является обычным перенаправлением, а необходимой частью синтаксиса. Вам понадобится второй, >
если вы захотите объединить его с реальным перенаправлением (с пробелом между ними, чтобы это не читалось как >>
redirect-for-append).