JavaScript: Upsert data
- Primary keys should be included in the data payload in order for an update to work correctly.
- Primary keys  must be natural, not surrogate. There are however, workarounds for surrogate primary keys.
- If you need to insert new data and update existing data at the same time, use Postgres triggers.
Examples
Upsert your data
const { data, error } = await supabase
  .from('messages')
  .upsert({ id: 3, message: 'foo', username: 'supabot' })
Bulk Upsert your data
const { data, error } = await supabase
  .from('messages')
  .upsert([
  { id: 3, message: 'foo', username: 'supabot' },
  { id: 4, message: 'bar', username: 'supabot' }
  ])
Upserting into tables with constraints
const { data, error } = await supabase
  .from('users')
  .upsert({ username: 'supabot' }, { onConflict: 'username' })
Return the exact number of rows
const { data, error, count } = await supabase
  .from('users')
  .upsert({
      id: 3, message: 'foo',
      username: 'supabot'
  }, {
    count: 'exact'
  })