Piping Postgres COPY in Python mit psycopg2

8

Ich schreibe ein Skript, um eine Kopie einiger Daten zwischen zwei Rechnern im selben Netzwerk mit psycopg2 zu erstellen. Ich ersetze eine alte, hässliche Bash, die die Kopie mit

macht %Vor%

Dies scheint sowohl die einfachste als auch effizienteste Möglichkeit, die Kopie zu erstellen. Es ist einfach in Python mit einem stringIO oder einer temporären Datei zu replizieren, so:

%Vor%

... aber das beinhaltet das Speichern aller Daten auf der Festplatte / im Speicher.

Hat jemand eine Möglichkeit gefunden, das Verhalten einer Unix-Pipe in einer solchen Kopie nachzuahmen? Ich kann nicht scheinen, ein Unix-Rohr-Objekt zu finden, das POpen nicht einschließt - Vielleicht ist die beste Lösung, POpen und subprocess schließlich zu verwenden.

    
blinsay 20.07.2011, 16:33
quelle

2 Antworten

12

Sie müssen einen Ihrer Anrufe in einen separaten Thread setzen. Ich habe gerade gemerkt, dass du os.pipe () verwenden kannst, was den Rest macht ganz einfach:

%Vor%     
Aryeh Leib Taurog 06.02.2012 20:24
quelle
0

Sie könnten eine von Ihnen unterklassifizierte Deque verwenden, um Lesen und Schreiben zu unterstützen:

%Vor%

Wenn der Leser viel schneller ist als der Schreiber, und die Tabelle groß ist, wird deque immer noch groß, aber kleiner als das Ganze.

Ich weiß auch nicht sicher return '' , wenn deque leer ist, ist sicher, anstatt es erneut zu versuchen, bis es nicht leer ist, aber ich denke es ist. Lass es mich wissen, wenn es funktioniert.

Denken Sie an del buf , wenn Sie sicher sind, dass die Kopie fertig ist, insbesondere, wenn das Skript nicht gerade an diesem Punkt beendet wird.

    
agf 20.07.2011 16:55
quelle

Tags und Links