Comment puis-je désactiver les clés étrangères ou les déclencheurs dans Amazon RDS for PostgreSQL ou Amazon Aurora édition compatible avec PostgreSQL ?

Lecture de 3 minute(s)
0

Je souhaite désactiver la vérification des clés étrangères pour mon instance de base de données Amazon Relational Database Services (Amazon RDS) for PostgreSQL ou Amazon Aurora édition compatible avec PostgreSQL.

Brève description

PostgreSQL ne fournit pas de fonction directe permettant d'activer ou de désactiver les contraintes de clé étrangère. Lorsque vous créez une clé étrangère sur une table dans PostgreSQL, PostgreSQL crée un déclencheur interne pour vérifier l'intégrité des données. Pour désactiver les contraintes de clé étrangère, vous devez disposer d’autorisations de super-utilisateur pour supprimer les déclencheurs internes créés par PostgreSQL.

Lorsque vous exécutez la commande suivante qui désactive tous les déclencheurs d'une table, une erreur d’autorisation refusée s'affiche :

ALTER TABLE TestTable DISABLE TRIGGER ALL;
Error report -
ERROR: permission denied: "RI_ConstraintTrigger_c_9999181" is a system trigger

Étant donné que RDS for PostgreSQL et Aurora édition compatible avec PostgreSQL sont des services gérés, ils n'accordent pas toutes les autorisations de super-utilisateur, même à l'utilisateur principal. La commande ALTER TABLE 'tablename' DISABLE TRIGGER ALL; n'est pas autorisée.

Résolution

Remarque : Si le déclencheur n'est pas activé, l'intégrité de la contrainte peut être affectée. En outre, la variable de configuration session_replication_role peut affecter le mécanisme qui active le déclencheur. Lorsque vous activez les déclencheurs pour un rôle de réplication d'origine ou local, les déclencheurs sont activés. Pour plus d'informations, consultez la page session_replication_role (enum) sur le site Web de PostreSQL.

Modifier session_replication_role en réplica

Pour désactiver les contraintes de clé étrangère dans RDS for PostgreSQL ou Aurora édition compatible avec PostgreSQL, modifiez le paramètre session_replication_role de origine à réplica. Lorsque vous modifiez ce paramètre à réplica, vous autorisez pg_restore ou pgloader à insérer ou à mettre à jour les données dans la table.

Pour modifier session_replication_role à réplica, utilisez l'une des options suivantes :

  • Si vous utilisez la session pgadmin ou PostgreSQL, exécutez la commande suivante afin que les déclencheurs système qui appliquent le référentiel en interne ne soient pas activés :
postgres=> set session_replication_role = replica;

Remarque : La modification n'est valable que pour la session en cours.

Remarque : Une fois l'opération terminée, rétablissez le paramètre session_replication_role à origine. Si vous ne rétablissez pas session_replication_role à origine, vous pouvez rencontrer des problèmes d'intégrité référentielle dans vos autres tables.

Supprimer la contrainte de clé étrangère sur la table

Pour désactiver un déclencheur sans autorisations de super-utilisateur, exécutez la commande suivante pour supprimer la contrainte de clé étrangère sur la table :

Alter table table_name drop constraint key_name;

Remplacez table_name par le nom de table de votre base de données et key_name par le nom de clé de votre table. Pour en savoir plus, consultez la page ALTER TABLE sur le site Web de PostgreSQL.

Informations connexes

Comment puis-je activer les fonctions, les procédures et les déclencheurs pour mon instance de base de données Amazon RDS for MySQL ?

Utilisation d'une base de données PostgreSQL comme cible pour AWS Database Migration Service

Comportement du « réplica » session_replication_role sur le site Web de PostreSQL

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 3 mois