deshabilitar restricciones antes de usar pg_restore.exe


16

Cuando intento ejecutar pg_restore.exeun 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.exedesde adentro psql.exedespué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 -cleanindicador crea un volcado que omite la comprobación de restricciones al restaurar la base de datos?


Publicación cruzada aquí, en caso de que alguien encuentre esto más tarde: stackoverflow.com/questions/12093654/…
Craig Ringer el

Respuestas:


28

¿Has probado la --disable-triggersopción pg_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-onlyrestauración y también requiere --superuser=usernameque se pase la opción.


Y funciona de maravilla ...
Stephane Rolland
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.