如何使用多列在Supabase中实现批量删除?
Supabase API是否支持多列组合标识的批量删除?
问题说明
Supabase官方API支持基于单列的批量删除,示例代码如下:
const { data, error } = await supabase .from('cities') .delete() .in('id', ['1', '2'])
但不支持直接通过.in()方法传入多列组合(比如{list_id,contact_id})来批量删除多行,像下面这种写法无法生效:
const { data, error } = await supabase .from('list_members') .delete() .in('{list_id,contact_id}', ['{7,2}', '{7,4}']);
可行解决方案:自定义PostgreSQL函数
可以通过编写PostgreSQL函数实现多列组合的批量删除,以下是可用的实现(效率需结合实际数据量评估):
create or replace function bulk_delete_list_members (list_ids bigint [], contact_ids bigint []) returns setof bigint language PLPGSQL as $$ begin return query WITH deleted AS ( delete from list_members where (list_id, contact_id) in ( select list_id, contact_id from unnest(list_ids, contact_ids) as x(list_id, contact_id) ) returning * ) SELECT count(*) FROM deleted; end; $$;
该函数通过unnest将传入的两个数组参数配对,生成对应的(list_id, contact_id)组合,再执行删除操作,最终返回删除的行数。
内容的提问来源于stack exchange,提问作者stuart
相关产品推荐
相关产品推荐

