【发布时间】:2011-10-09 13:38:09
【问题描述】:
我正在编写一个脚本来使用 psycopg2 在同一网络上的两台机器之间复制一些数据。我正在替换一些旧的、丑陋的 bash 来进行复制
psql -c -h remote.host "COPY table TO STDOUT" | psql -c "COPY table FROM STDIN"
这似乎是最简单和most efficient 的复制方式。使用 stringIO 或临时文件在 python 中复制很容易,如下所示:
buf = StringIO()
from_curs = from_conn.cursor()
to_curs = to_conn.cursor()
from_curs.copy_expert("COPY table TO STDOUT", buf)
buf.seek(0, os.SEEK_SET)
to_curs.copy_expert("COPY table FROM STDIN", buf)
...但这涉及将所有数据保存到磁盘/内存中。
有没有人想出一种方法来在这样的副本中模仿 Unix 管道的行为?我似乎找不到不涉及 POpen 的 unix-pipe 对象 - 毕竟,也许最好的解决方案是只使用 POpen 和子进程。
【问题讨论】:
-
好奇以下解决方案是否有效?
标签: python sql copy pipe psycopg2