Cuando intento ejecutar pg_restore.exe
un archivo de volcado de una base de datos, arroja docenas de errores, de todos modos:
ERROR: insert or update on table "someTable" violates foreign key constraint "aConstraintName"
Obviamente, esto se debe al hecho de que he vaciado la base de datos antes de restaurarla del archivo de volcado (este archivo proviene de una base de datos de producción) ... luego, por supuesto, ninguna restricción de claves externas puede estar bien si una tabla referenciada está vacía ...
¿Hay alguna manera de deshabilitar las restricciones y todas las claves foráneas, para todas las tablas, antes de llamar pg_restore.exe
, y luego, volver a habilitar las restricciones y las claves foráneas?
En SO encontré algo interesante: diferir la comprobación de restricciones para comprometer el tiempo . Pero no creo que pueda llamar pg_restore.exe
desde adentro psql.exe
después de diferir las restricciones.
También existe esta publicación , que data de hace 10 años, que sugiere eliminar y volver a agregar las restricciones. O cambiar el valor de pg_class reltriggers a 0 y eso también sería posible por restricciones ... pero me temo que es más pirateo que una buena práctica ...
¿Qué aconseja, cuál es la mejor práctica en este caso? ¿Usar pg_dump.exe
con el -clean
indicador crea un volcado que omite la comprobación de restricciones al restaurar la base de datos?
fuente
Respuestas:
¿Has probado la
--disable-triggers
opciónpg_restore
?Según la documentación: use esto si tiene comprobaciones de integridad referencial u otros desencadenantes en las tablas que no desea invocar durante la recarga de datos.
Tenga en cuenta que esto solo es válido para una
--data-only
restauración y también requiere--superuser=username
que se pase la opción.fuente