Postgres beslutter at kontrollere begrænsninger af typen IMMEDIATELY
på et andet tidspunkt end foreslået i SQL-standarden.
Specifikt dokumentationen for SET CONSTRAINTS
anfører (min fremhævelse):
Postgres vælger at udføre denne forespørgsel ved hjælp af en plan, der resulterer i en midlertidig kollision for sort_order
og STRAKS fejler. Bemærk, at det betyder, at for det samme skema og de samme data kan den samme forespørgsel fungere eller mislykkes afhængigt af eksekveringsplanen.
Du bliver nødt til at gøre begrænsningen DEFERRABLE
eller DEFERRABLE INITIALLY DEFERRED
, som forsinker bekræftelsen af begrænsningen indtil slutningen af transaktionen eller op til det punkt, hvor en sætning SET CONSTRAINTS ... IMMEDIATE
udføres.
Tilføjelse fra @HansGinzels kommentar: