Piszę skrypt, aby zrobić kopię niektórych danych między dwoma komputerami w tej samej sieci, używając psycopg2. Jestem pewien, zastępując starą, brzydką bash, które wykonuje kopię zrura postgresowa KOPIA w pythonie z psycopg2
psql -c -h remote.host "COPY table TO STDOUT" | psql -c "COPY table FROM STDIN"
Wydaje się zarówno najprostszym i most efficient sposób zrobić kopię. Jest to łatwe do powtórzenia w Pythonie z StringIO lub Temp-pliku, tak jak poniżej:
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)
... ale to wiąże się zapisywanie wszystkich danych na dysku/pamięci.
Czy ktoś wymyślił sposób naśladowania zachowania rury uniksowej w takiej kopii? Nie mogę znaleźć obiektu o uniksowych rurach, który nie zawiera POpen - może najlepszym rozwiązaniem jest po prostu użycie POpen i podprocesu.
Ciekawy jest poniżej rozwiązanie zadziałało? – agf