Postgres решава да провери ограничения от тип IMMEDIATELY
в различно време от предложеното в SQL стандарта.
По-конкретно, документацията за SET CONSTRAINTS
заявява (подчертаването е мое):
Postgres избира да изпълни тази заявка, използвайки план, който води до временен сблъсък за sort_order
иВЕДНАГА не успява. Имайте предвид, че това означава, че за една и съща схема и едни и същи данни една и съща заявка може да работи или да се провали в зависимост от плана за изпълнение.
Ще трябва да направите ограничението DEFERRABLE
или DEFERRABLE INITIALLY DEFERRED
, което забавя проверката на ограничението до края на транзакцията или до момента, в който се появява израз SET CONSTRAINTS ... IMMEDIATE
се изпълнява.
Допълнение от коментара на @HansGinzel: