我正在寫一個腳本來執行psycopg2在同一網絡上的兩臺機器之間的一些數據的副本。我與管道postgres在python與psycopg2 COPY
psql -c -h remote.host "COPY table TO STDOUT" | psql -c "COPY table FROM STDIN"
取代一些舊的,醜陋的bash,做副本這似乎是既做副本的最簡單和most efficient方式。這很容易在Python中複製一個StringIO的或臨時文件,像這樣:
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和子進程。
好奇的是下面的解決方案工作? – agf