Supabase UPSERT

mwoollen

Mark Woollen

Posted on June 8, 2024

Supabase UPSERT

UPSERT in Supabase is intended to be a simplified combination of UPDATE and INSERT. (If the record already exists, then it will be updated and if not, then one will be created).

However, for me, UPSERT was a bit tricky to understand and get working. Suppose I have a table ('the_table') with primary keys: 'id' (type: uuid, default: gen_random_uuid()) and 'name' (type: text). The standard documentation indicates using "onConflict" but does not provide any useful example. I managed to find an article on restack.io that had a brief code snippet buried in several pages down. I adjusted to show how onConflict can reference the 'name' column.

const { data: retData, error: retError } = await supabase
  .from('the_table')
  .upsert({ name: 'Pablo', description: 'Helpful and friendly'}, { onConflict: 'name' }).select();
console.log("Error: ", retError )
  console.log("Data: ", retData[0].name, ", ", retData[0].description);
Enter fullscreen mode Exit fullscreen mode

This snippet shows how to UPSERT a record into 'the_table' where the conflict resolution is based on the 'name' column. If a record with name ('Pablo') exists, then it will be updated; otherwise, a new record will be inserted.

NEW NOTE 9/21/2024: you can also configure "NAME" table as primary key and eliminate "ID" as primary key.

💖 💪 🙅 🚩
mwoollen
Mark Woollen

Posted on June 8, 2024

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related

Supabase UPSERT
supabase Supabase UPSERT

June 8, 2024