Optimera SQL-fråga som genererats i databasuppdateringsguiden

I den här artikeln behandlas problemet med att lägga till ett heltalsfält i ett befintligt schema i Adobe Campaign, särskilt när det redan finns poster. Du löser detta genom att optimera SQL-frågan genom att komprimera de fyra kommandona (som beskrivs i den här artikeln) till ett. Detta bör säkerställa en effektiv drift utan prestandaproblem eller dödlägen.

Beskrivning description

Miljö

  • Adobe Campaign
  • Adobe Campaign Classic

Problem/symtom

I de flesta av Adobe Campaign-byggen, inklusive Gold Standard 9032, kan du stöta på flera problem när du lägger till nya kolumner i ett befintligt schema.

Syftet med denna artikel är att åtgärda ett specifikt problem som rör

  • Lägga till ett heltalsfält i ett befintligt schema när det redan finns poster.
  • Optimera SQL-frågan som genereras av programmet till en effektiv fråga för Postgres SQL.

Upplösning resolution

När du lägger till en heltalskolumn skapas SQL-satsen på ungefär följande sätt:

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;

Problemet här är att det finns fyra kommandon som körs parallellt i databasen, vilket kan orsaka prestandaproblem eller ett dödläge.
Lösningen är att komprimera dessa fyra kommandon till ett och fortfarande göra samma ändringar som nedan:

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

Den utför alla ändringar som krävs, lägger till kolumnen, anger standardvärdet, anger NOT NULL och anger även värdet för befintliga poster till ** på grund av begränsningen NOT NULL.

OBS!

Om det finns flera heltalskolumner som behöver läggas till lägger du till dem en i taget och kör databasguiden för varje ändring.

Detta är för att säkerställa en smidig åtgärd eftersom satsen även uppdaterar alla befintliga poster till 0, vilket kan ta tid beroende på antalet poster.

Orsak

Detta kan inträffa om du t.ex. har en befintlig mottagartabell eller en annan tabell som redan har mer än en miljon poster.

Om du nu behöver lägga till en extra kolumn till den tabellen, som är av datatypen Integer. I så fall lägger du till den kolumnen i schemadefinitionen och vill implementera ändringarna i databasen.

När databasen uppdateras upptäcks ett dödläge i databasen, eller så blockerar frågan andra åtgärder.

Detta beror huvudsakligen på att alla poster har uppdaterats till 0 baserat på SQL-kommandot som genererats av databasguiden.

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