Estoy escribiendo un script para hacer una copia de algunos datos entre dos máquinas en la misma red usando psycopg2. Estoy reemplazando una vieja fea fiesta, que hace la copia contubería postgres COPIA en python con psycopg2
psql -c -h remote.host "COPY table TO STDOUT" | psql -c "COPY table FROM STDIN"
Esto parece tanto a la forma más simple y most efficient hacer la copia. Es fácil de replicar en pitón con un Stringio o un archivo temporal, así:
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)
... pero eso implica guardar todos los datos en el disco/en la memoria.
¿Alguien ha encontrado una forma de imitar el comportamiento de una tubería Unix en una copia como esta? Parece que no puedo encontrar un objeto Unix-pipe que no implique POpen. Tal vez la mejor solución es simplemente usar POpen y subprocesar, después de todo.
curioso es trabajado por debajo de la solución? – agf