
Quiero hacer una copia de seguridad de una base de datos usando psql
un COPY
comando. aquí está mi guión:
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
También quiero saber cuántas líneas se copian de la base de datos, pero psql no tiene esa característica. entonces necesito un comando externo. Necesito algo como esto:
psql ... | wc -l | bzip2
¿Hay alguna solución? La única solución que he encontrado es usar quince:
mkfifo /home/backup.fifo
psql ... | tee /home/backup.fifo | bzip2
Ahora desde otra ventana de terminal puedo usar wc
:
wc -l /home/backup.fifo
Respuesta1
Ambos bash
y zsh
tienen una >(pipeline)
característica:
psql ... | tee >(wc -l) | bzip2
Tenga en cuenta que >
aquí no se trata de una redirección normal, sino de una parte necesaria de la sintaxis. Necesitaría un segundo >
si quisiera combinarlo con una redirección real (con un espacio entremedio para que no se lea como >>
redirección para agregar).