diff --git a/src/bin/import.rs b/src/bin/import.rs index e0f1b8138481714a8131382fcacadfd99affd4bd..8645379fa5b4db185dcec38afb7e6290c3e2a4ab 100644 --- a/src/bin/import.rs +++ b/src/bin/import.rs @@ -238,7 +238,27 @@ async fn get_edges( }) .unzip(); - query!("INSERT INTO edges(from_id, to_id) SELECT UNNEST($1::INT[]), UNNEST($2::INT[]) ON CONFLICT DO NOTHING", &from_ids, &to_ids).execute(&p).await?; + query!( + r#" +WITH unique_edges AS ( + SELECT UNNEST($1::INT[]) AS from_id, UNNEST($2::INT[]) AS to_id +) +INSERT INTO edges(from_id, to_id) +SELECT ue.from_id, ue.to_id +FROM unique_edges ue +WHERE NOT EXISTS ( + SELECT 1 + FROM edges e + WHERE e.from_id = ue.from_id + AND e.to_id = ue.to_id +) +ON CONFLICT DO NOTHING +"#, + &from_ids, + &to_ids + ) + .execute(&p) + .await?; statsd.count("edges.inserts", from_ids.len() as f64, &None);