
Quero fazer backup de um banco de dados usando psql
um COPY
comando. aqui está meu roteiro:
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
Também quero saber quantas linhas são copiadas do banco de dados, mas o psql não possui esse recurso. então preciso de comando externo. Eu preciso de algo assim:
psql ... | wc -l | bzip2
Existe alguma solução? A única solução que encontrei é usar fifo:
mkfifo /home/backup.fifo
psql ... | tee /home/backup.fifo | bzip2
Agora, em outra janela do terminal, posso usar wc
:
wc -l /home/backup.fifo
Responder1
Ambos bash
e zsh
têm um >(pipeline)
recurso:
psql ... | tee >(wc -l) | bzip2
Observe que >
aqui não é um redirecionamento normal, mas uma parte necessária da sintaxe. Você precisaria de um segundo >
se quisesse combiná-lo com um redirecionamento real (com um espaço entre eles para que não fosse lido como >>
redirecionamento para acréscimo).