Introduktion
Fejlmeddelelsen “Duplicate Key Value Violates Unique Constraint” i Odoo dukker op, når systemet prøver at oprette eller ændre en post med en værdi, som databasen allerede kræver skal være unik — og PostgreSQL derfor blokerer handlingen.
Det er en database-niveau fejl fra PostgreSQL og ses ofte i disse sammenhænge:
- Serverlogs
- Fejl ved import
- API-svar
- Opgraderinger af moduler
- Datascripts til migration
Typisk ser fejlen sådan ud:
psycopg2.errors.UniqueViolation: duplicate key value violates unique constraint "res_partner_email_uniq" DETAIL: Key (email)=(john@example.com) already exists.
Denne guide viser, hvorfor fejlen opstår, og hvordan du løser den korrekt uden at gå på kompromis med dataintegriteten.
Hvad betyder en unik begrænsning i Odoo?
En unik begrænsning sikrer, at bestemte felter ikke kan indeholde gentagne værdier — altså at fx e-mailadresser eller produktnumre er entydige.
I Odoo håndhæves entydighed på flere måder:
- SQL-constraints
- _sql_constraints i modeldefinitioner
- Unikke indeks på databaseniveau
Eksempel på en modelregel:
_sql_constraints = [
('email_unique', 'unique(email)', 'Email must be unique.')
]
Effekten er, at to poster ikke kan have samme e-mailadresse.
Hvis et duplicate indsættes, afviser PostgreSQL operationen.
Hyppige årsager til fejl om duplicate key constraint
1. Oprettelse af en post der allerede findes
Fejlen opstår hvis du forsøger at oprette:
- En kontakt med en allerede registreret e-mail
- Et produkt med et eksisterende internt referencefelt
- En bruger med et allerede anvendt login
Odoo vil afvise oprettelsen.
2. API eller integration opretter dubletter
Eksterne systemer kan komme til at:
- Oprette en eksisterende kunde igen
- Sende samme ordre flere gange
- Oprette gentagne produktposter
Fordelen mangler ofte: de tjekker ikke først om posten allerede findes.
Det er en meget almindelig integrationsfejl.
3. Import af dubletter fra CSV
CSV-importer med gentagne værdier i unikke felter fejler typisk.
Eksempel på en modelregel:
Fx to rækker med samme e-mail eller ekstern reference.
4. Migration der tilføjer en ny unik begrænsning
Hvis en opgradering indfører en ny unik regel og der allerede findes dubletter i data, vil migrationen fejle.
5. Forkert håndtering af eksterne ID’er
Hvis integrationer ignorerer eksterne id’er og kun indsætter rå data, kan dubletter opstå.
Korrekt mapping og brug af eksterne id’er forhindrer dette.
6. Manuel manipulation direkte i databasen
Direkte SQL-indsætninger kan omgå ORM-validering, men databasen håndhæver stadig sine unikke begrænsninger.
Sådan retter du fejlen i Odoo: duplicate key constraint
Trin 1 – Identificer constraint-navnet
Fejlbeskeden fortæller hvilken constraint der sprang:
duplicate key value violates unique constraint "res_partner_email_uniq"
Ud fra navnet kan du se hvilket felt der er registreret som unikt.
Trin 2 – Find den dublerede post
Søg i modellen efter den værdi, der forårsager fejlen.
Eksempel på en modelregel:
Søg fx efter e-mailen i res.partner.
Beslut hvad der skal ske med resultatet:
- Opdatere den eksisterende post
- Sammenflette dubletter
- Fjerne fejlagtige poster
Trin 3 – Justér integrationslogikken
Hvis fejlen stammer fra en API-integration:
- Implementér altid “søg før opret” mønsteret
- Brug søgning til at finde eksisterende poster
- Opdater i stedet for at oprette nye dubletter
Det mindsker gentagne fejl dramatisk.
Trin 4 – Ryd op i dubletter før migration
Hvis migrationen fejler på grund af dubletter:
- Identificér de duplikerede poster
- Sammenflet eller slet de overflødige rækker
- Kør migrationen igen
Fjern aldrig en unik constraint blot for at få migrationen til at passere uden først at rydde op i data.
Trin 5 – Brug eksterne ID’er til synkronisering
I stedet for at stole på interne database-id’er:
- Benyt eksterne id’er
- Hold mappingen konsekvent
- Undgå blinde indsætninger
Struktureret synkronisering reducerer markant risikoen for duplicate key-fejl.
Trin 6 – Undgå direkte SQL-indsætninger
Brug altid Odoos ORM til at oprette eller opdatere poster.
ORM’en håndterer validering og business-logic mere sikkert end rå SQL-indsæt.
Sådan forebygger du fejl med duplicate keys
- Valider data inden indsættelse
- Implementér patterns som “search-before-create”
- Brug eksterne id’er konsekvent
- Rens legacy-data løbende
- Overvåg integrationslogs aktivt
- Undgå at omgå ORM’en
Unikke begrænsninger er til for at beskytte dataintegriteten. Målet er at rette dubletter korrekt i stedet for at fjerne begrænsningen.
Hvordan Dasolo forhindrer datadublering i stor skala
Fejl om duplicate key constraint peger ofte på manglende sikre mekanismer i processen for oprettelse af data. Uanset om fejlen opstår ved manuel indtastning, import eller via API, afslører den typisk, at der mangler idempotens eller tilstrækkelig validering før oprettelse.
Hos Dasolo mindsker vi risikoen for dublering ved at fokusere på:
- Tydelige regler for hvilke felter der skal være unikke
- ’Search-before-create’ logik i integrationer
- Kontrolleret håndtering af eksterne id’er
- Validering under import
- Løbende overvågning af synkroniseringsflows
En disciplineret datastyringsproces forhindrer ukontrolleret dublering og bevarer databasens konsistens.
Konklusion
Fejlmeddelelsen i Odoo opstår, når en handling forsøger at tilføje eller ændre en post med en værdi, som databasen kræver skal være unik. Databasen stopper handlingen for at beskytte integriteten, men rodårsagen er ofte svag validering eller ustabil synkroniseringslogik.
Ved at bruge ’search-before-create’, rydde op i gamle dubletter og have klare regler for entydighed kan udviklere minimere gentagne constraint-fejl. At beskytte unikke felter er afgørende for stabile og skalerbare Odoo-implementeringer.