I am using this rust code to do an upsert right now:
diesel::insert_into(favorites::table)
.values(&new_fav)
.on_conflict(id)
.do_update()
.set(like_status.eq(1))
.execute(&connection)
.unwrap();
but the execute log shows error:
thread 'rocket-worker-thread' panicked at 'called `Result::unwrap()` on an `Err` value: DatabaseError(UniqueViolation, "duplicate key value violates unique constraint \"fav_uniq_idx\"")', src/service/music/music_service.rs:49:10
fav_uniq_idx
is a custom uniq constraint in PostgreSQL 13, define it like this:
ALTER TABLE public.favorites ADD CONSTRAINT unique_idx UNIQUE (source_id, user_id);
is it possible to define the conflict handle logic in rust diesel code about custom constraint?
I do it like this:
diesel::insert_into(favorites::table)
.values(&new_fav)
.on_conflict(on_constraint("unique_idx"))
.do_update()
.set(like_status.eq(1))
.execute(&connection)
.unwrap();
works.