W przeciwieństwie do komentarzy, współbieżne wstawianie do tej samej tabeli jest całkowicie dozwolone w PostgreSQL, więc istnieje tu sytuacja wyścigu.
Aby to było bezpieczne, musisz mieć unique
ograniczenie (lub primary key
) na column_name
. Zduplikowane wstawki wygenerują następnie wyjątek, który możesz przechwycić i spróbować ponownie za pomocą aktualizacji.
Jeśli nie masz unikatowego ograniczenia, musisz LOCK TABLE ... IN EXCLUSIVE MODE
aby zapobiec równoczesnym upserts. Lub użyj jednej z bezpiecznych metod współbieżności opisanych w:
Jak UPSERT (MERGE, INSERT... W DUPLICATE UPDATE) w PostgreSQL?