我想用复制命令将数据复制到postgres中;而其他进程同时写入CSV文件。
这样的事情可能吗?把stdout从尾部和管道带到postgres的stdin。
COPY targetTable ( column1, column2 )
FROM `tail -f 'path/to/data.csv'`
WITH CSV
答案 0 :(得分:1)
假设PostgreSQL 9.3或更高版本,可以从程序输出中复制:
COPY FROM PROGRAM 'command'
来自the doc:
PROGRAM
要执行的命令。在COPY FROM中,输入从标准读取 输出命令,并在COPY TO中,输出被写入 命令的标准输入。
这可能是你需要的,除了tail -f
是一个永无止境的命令设计,你计划如何完成COPY并不明显。据推测,您需要使用更复杂的脚本替换tail -f
并使用一些退出条件。
答案 1 :(得分:0)
你也可以从STDIN复制; 例如:
tail -f datafile.csv | psql -tc "COPY table from STDIN" database