我想用复制命令将数据复制到postgres中;而其他进程正在同时写入CSV文件。Postgres COPY命令尾部文件?
是这样的可能吗?从尾部和管道输入stdout到postgres的stdin。
COPY targetTable (column1, column2)
FROM `tail -f 'path/to/data.csv'`
WITH CSV
我想用复制命令将数据复制到postgres中;而其他进程正在同时写入CSV文件。Postgres COPY命令尾部文件?
是这样的可能吗?从尾部和管道输入stdout到postgres的stdin。
COPY targetTable (column1, column2)
FROM `tail -f 'path/to/data.csv'`
WITH CSV
假设的PostgreSQL 9.3或更好,有复制从程序输出的可能性与:
COPY FROM PROGRAM 'command'
从the doc:
PROGRAM
执行以下步骤的命令。在COPY FROM中,从标准输出 中读取输入的命令,并在COPY TO中将输出写入 标准输入的命令。
这可能是你需要的,除了tail -f
是一个永无止境的设计命令这一事实,你不清楚COPY的计划是如何完成的。据推测,你需要用一些更复杂的脚本替换tail -f
以及一些退出条件。
你也可以从STDIN复制; 示例:
tail -f datafile.csv | psql -tc "COPY table from STDIN" database
原本是I + 1ed,但DanielVérité说得很好:'tail -f'永远不会结束! –
这实际上是否有效,甚至忽略了它将如何结束的问题?我原以为你必须使用\从pstdin复制。 SQL命令中的STDIN表示“来自客户端连接”,不一定是客户端本身的标准输入。 – harmic
在这里寻找使用'tail'仅用于'.sql'文件中的最后一个记录。 'tail -n 1 datafile.sql | psql数据库-tc“\ COPY表FROM STDIN”' –
psql版本'\ copy'可能工作。它至少支持从stdin和pstdin读取数据。有关详细信息,请尝试'man psql'。 –