psycopg2を使用して同じネットワーク上の2台のマシン間でデータのコピーを作成するスクリプトを作成しています。私はpiping postgres psycopg2を使用したPythonでのコピー
psql -c -h remote.host "COPY table TO STDOUT" | psql -c "COPY table FROM STDIN"
でコピーをして、いくつかの古い、醜いのbashを交換していますこれは、コピーを行うための最も簡単かつmost efficient方法の両方のように思えます。
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)
を...しかし、それはメモリに/ディスクにすべてのデータを保存含まれます。それはそうと同じように、StringIOをまたは一時ファイルをpythonで複製することは簡単です。
誰かがこのようなコピーでUnixパイプの動作を模倣する方法を考え出しましたか?私はPOpenに関係しないUnix-pipeオブジェクトを見つけることができないようです - おそらく最良の解決策はPOpenとサブプロセスを使用することです。読者はライターよりもはるかに高速で、かつテーブルが大きい場合、deque
はまだ、大きな取得します
from collections import deque
from Exceptions import IndexError
class DequeBuffer(deque):
def write(self, data):
self.append(data)
def read(self):
try:
return self.popleft()
except IndexError:
return ''
buf = DequeBuffer()
:
好奇心は以下の解決策ですか? – agf