Psycopg2'yi kullanarak aynı ağdaki iki makine arasındaki bazı verilerin bir kopyasını yapmak için bir komut dosyası yazıyorum. Benboru gönderimleri psycog2 ile python'da COPY
psql -c -h remote.host "COPY table TO STDOUT" | psql -c "COPY table FROM STDIN"
ile kopyasını yapar bazı eski, çirkin bash yerine gidiyorum Bu kopyasını yapmak için en basit ve most efficient şekilde hem benziyor.
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)
... ama bu bellekte/diske tüm verileri kaydetme içerir: O kadar olduğu gibi, bir StringIO veya geçici-dosya ile python çoğaltmak kolay.
Böyle bir kopyada bir Unix borusunun davranışını taklit etmenin bir yolu var mı? POpen içermeyen bir unix-pipe nesnesi bulamıyorum - Belki de en iyi çözüm sadece POpen ve subprocess kullanmaktır.
Aşağıdaki çözüm işe yarayıp yaramadığını os.pipe() kullanabilirsiniz. – agf