postgrest-js icon indicating copy to clipboard operation
postgrest-js copied to clipboard

Unexpected behavior for multiple operations on the same table

Open rkistner opened this issue 9 months ago • 0 comments

Bug report

  • [x] I confirm this is a bug with Supabase, not with my own application.
  • [x] I confirm I have searched the Docs, GitHub Discussions, and Discord.

Describe the bug

Multiple operations on the same "table" (PostgrestQueryBuilder instance) share state unexpectedly. If this is by design, it should be documented.

To Reproduce

Run the following code:

const table = supabase.from('mytable');
await table.update({a: 1}).eq('id', 1);
await table.update({a: 2}).eq('id', 2);

I'd expect this to do two separate operations: update mytable set a = 1 where id = 1, then update mytable set a = 2 where id = 2. What actually happens is the second operation is the equivalent of update mytable set a = 2 where id = 1 and id = 2, resulting in nothing being updated. Request logs show the search string for the PATCH request as ?id=eq.1&id=eq.2.

Expected behavior

The two operations on table should be independent, and not affect each other.

Screenshots

N/A

System information

  • OS: N/A
  • Browser: Tested on Chrome
  • Version of supabase-js: 2.48.1 / postgrest-js 1.18.1
  • Version of Node.js: N/A

Additional context

There is a simple workaround - refactor the code as follows:

await supabase.from('mytable').update({a: 1}).eq('id', 1);
await supabase.from('mytable').update({a: 2}).eq('id', 2);

It's difficult to tell whether this behavior is by design or a bug. But it's definitely not expected, and leads to difficult-to-debug issues.

I also tested the Dart postgrest package, and there the same code does work as expected (two independent operations).

I tested with update specifically, but I assume other operations such as select will likely have the same issue.

rkistner avatar Feb 23 '25 13:02 rkistner