PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Quando Postgres verifica i vincoli univoci?

Postgres decide di verificare i vincoli di tipo IMMEDIATELY in un momento diverso da quello proposto nello standard SQL.

In particolare, la documentazione per SET CONSTRAINTS afferma (sottolineatura mia):

Postgres sceglie di eseguire questa query utilizzando un piano che si traduce in una collisione temporanea per sort_order e IMMEDIATAMENTE non riesce. Tieni presente che per lo stesso schema e gli stessi dati, la stessa query potrebbe funzionare o non riuscire a seconda del piano di esecuzione.

Dovrai rendere il vincolo DEFERRABLE o DEFERRABLE INITIALLY DEFERRED , che ritarda la verifica del vincolo fino al termine dell'operazione o fino al punto in cui una dichiarazione SET CONSTRAINTS ... IMMEDIATE viene eseguito.

Addendum dal commento di @HansGinzel: