Upsert doesn't return data when row already exists
mrkpatchaa opened this issue · comments
Bug report
- I confirm this is a bug with Supabase, not with my own application.
- I confirm I have searched the Docs, GitHub Discussions, and Discord.
Describe the bug
Hi Team, when doing an upsert on an existing record, the select returns an empty array.
To Reproduce
This is my code
const {data, error} = supabase
.from('chats')
.upsert(data, { onConflict: ['user_id', 'listing_id'], ignoreDuplicates: true })
.select()
Running this the first time returns data
{
error: null,
data: [
{
id: 7,
created_at: '2023-07-25T19:19:03.942503+00:00',
updated_at: '2023-07-25T19:19:03.942503+00:00',
listing_id: 1,
user_id: 'bf21737c-8684-49af-944c-94b126f90f55'
}
],
count: null,
status: 201,
statusText: 'Created'
}
Running it second time with the same values for listing_id and user_id returns
{
error: null,
data: [],
count: null,
status: 201,
statusText: 'Created'
}
Expected behavior
The second call should return the same result as the first one.
Additional context
If the behaviour is normal, how should I get the id of the newly inserted / existing row? Typically I would run this code and redirect the user to the chat screen with id returned in data. The idea is to not make an extra call to the database.
Could you assign this issue to me? I would like to work upon this.
@avi1737 I cannot assign. Maybe an admin can help with that.
.upsert(data, { onConflict: ['user_id', 'listing_id'], ignoreDuplicates: true })
IMO this behavior is pretty clear from the ignoreDuplicates: true
usage, I don't see how it's a bug.
You should remove ignoreDuplicates
or set it to false
if you want the result to be returned.
@steve-chavez when I set ignoreDuplicates to false, I get this
{
error: null,
data: null,
count: null,
status: 201,
statusText: 'Created'
}