psql
我想使用andCOPY
命令备份数据库。这是我的脚本:
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”),您将需要一秒钟的时间。