Optimiser la requête SQL générée dans l'assistant de mise à jour de la base de données

Cet article traite de l’ajout d’un champ entier à un schéma existant dans Adobe Campaign, en particulier lorsque des enregistrements existent déjà. Pour résoudre ce problème, optimisez la requête SQL en condensant les quatre commandes (comme décrit dans cet article) en une seule. Cela devrait garantir un fonctionnement efficace sans problèmes de performances ni blocages.

Description description

Environnement

  • Adobe Campaign
  • Adobe Campaign Classic

Problème/Symptômes

Dans la plupart des builds Adobe Campaign, y compris les builds Gold Standard 9032, il se peut que vous rencontriez plusieurs problèmes lors de l’ajout de nouvelles colonnes à un schéma existant.

Le présent article a pour but de résoudre un problème spécifique qui a trait aux éléments suivants :

  • Ajouter un champ entier à un schéma existant lorsque des enregistrements existent déjà.
  • Optimisez la requête SQL générée par l'application pour une requête efficace pour Postgres SQL.

Résolution resolution

Lors de l’ajout d’une colonne entière, l’instruction SQL générée est la suivante :

ALTER TABLE NmsRecipient ADD <column_name> SMALLINT;
UPDATE NmsRecipient SET <column_name> = 0;
ALTER TABLE NmsRecipient ALTER COLUMN <column_name> SET Default 0;
ALTER TABLE NmsRecipient ALTER COLUMN i<column_name> SET NOT NULL;

Le problème ici est qu'il existe quatre commandes exécutées en parallèle dans la base de données, ce qui peut entraîner des problèmes de performances ou un blocage.
La solution consiste à condenser ces quatre commandes en une seule et tout en apportant les mêmes modifications que ci-dessous :

ALTER TABLE NmsRecipient ADD iFichierLiveDataCliqueurs SMALLINT NOT NULL SET Default 0 ;

Il effectue toutes les modifications requises, en ajoutant la colonne, en définissant la valeur par défaut, en définissant NOT NULL et également en définissant la valeur des enregistrements existants sur 0 en raison de la contrainte NOT NULL.

REMARQUE :

Si plusieurs colonnes entières doivent être ajoutées, ajoutez-les une par une et exécutez l’assistant de base de données pour chaque modification.

Cela permet d’assurer un fonctionnement fluide puisque l’instruction met également à jour tous les enregistrements existants vers 0, ce qui peut prendre du temps en fonction du nombre d’enregistrements.

Cause

Cela peut se produire lorsque, par exemple, vous disposez d’une table de destinataires existante ou de toute autre table qui contient déjà plus d’un million d’enregistrements.

Si vous devez maintenant ajouter une colonne supplémentaire à ce tableau, qui est de type Entier. Dans ce cas, vous ajoutez cette colonne dans la définition du schéma et souhaitez valider les modifications dans la base de données.

Lors de la mise à jour de la base de données, celle-ci se trouve dans un état de blocage ou la requête bloque d’autres opérations.

Cela est principalement dû à la mise à jour de tous les enregistrements vers 0 à partir de la commande SQL générée par l’assistant de base de données.

recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f