Sé que esta es una solicitud extraña, pero por algunas razones extrañas que no puedo evitar, me gustaría poder sincronizar constantemente algunas tablas de una base de datos a otra. Sé que podría escribir la funcionalidad yo mismo en un script, pero imagino que pg_dump y pg_restore aplicarán muchas optimizaciones al proceso que yo mismo no conozco.
Lo que me pregunto es si hay alguna forma de que pg_restore sobrescriba las tablas existentes. Básicamente, en pseudocódigo algo como:
-- pseudo code begin; drop table to_restore; drop table to_restore2; drop table to_restore3; -- etc restore table to_restore; restore table to_restore2; restore table to_restore3; -- etc commit;También estoy abierto a formas alternativas de hacer esto si esto no es tan bueno.
Parece que desea la opción -c especificada en la documentación de pg_restore
-C
--limpio
Limpie (elimine) los objetos de la base de datos antes de volver a crearlos. (A menos que se use --if-exists, esto podría generar algunos mensajes de error inofensivos, si algún objeto no estuviera presente en la base de datos de destino).
que puede usar con el indicador -1 para hacer todo en una transacción
-1
--transacción única
Ejecute la restauración como una sola transacción (es decir, envuelva los comandos emitidos en BEGIN/COMMIT). Esto garantiza que todos los comandos se completen correctamente o que no se aplique ningún cambio. Esta opción implica --exit-on-error.
Este es solo un ejemplo de posible solución:
copie esas tablas desde el primer db a csv. y use una copia extremadamente rápida en la transacción:
begin; truncate table to_restore; truncate table to_restore2; truncate table to_restore3; set commit_delay to 100000; set synchronous_commit to off; copy to_restore from 'to_restore.csv'; copy to_restore2 from 'to_restore2.csv'; copy to_restore3 from 'to_restore3.csv'; commit;