Estoy migrando el entorno de prueba existente a Amazon RDS PostgreSQL. El marco de prueba tiene una característica de recargar datos en ciertas tablas a un estado anterior. Para esto, deshabilita las claves externas, elimina los datos existentes, carga el estado de guardado y habilita nuevamente las claves externas.
Actualmente, el marco de prueba deshabilita las claves foráneas al deshabilitar todos los disparadores (por supuesto, esto requiere superusuario):
alter table tablename disable trigger all;
En RDS, esto falla con:
ERROR: permiso denegado: "RI_ConstraintTrigger_a_20164" es un activador del sistema
¿Cómo puedo desactivar temporalmente las claves foráneas en Amazon RDS PostgreSQL?
Nota: ya se ha hecho una pregunta similar ( PostgreSQL en RDS: ¿Cómo importar datos en masa con restricciones FK? ) Pero se trataba específicamente de la importación sin conexión y la solución también es específica para la importación sin conexión.
fuente
Respuestas:
session_replication_role
Encontré una forma alternativa de deshabilitar claves externas: https://stackoverflow.com/a/18709987
Y volver a habilitarlos con
Esto funciona en RDS pero aún requiere privilegios inusuales (es decir, no se otorga por defecto).
soltando y recreando FKs
La solución alternativa es, como se sugiere en los comentarios, eliminar temporalmente los FK. Esto brinda una ventaja adicional de que los datos se verifican cuando se reactivan los FK.
Goteante
Recreando
fuente