如何通过Flutter Supabase客户端实现SELECT源数据插入操作?
解决方案
方法1:通过PostgreSQL存储过程+Flutter客户端调用
先在Supabase控制台的SQL编辑器里创建存储过程,把插入逻辑封装进去:
CREATE OR REPLACE FUNCTION transfer_widget_to_foo() RETURNS void AS $$ BEGIN INSERT INTO foo (x, y) SELECT x, y FROM widget WHERE date > TO_DATE('12-12-2023', 'DD-MM-YYYY'); END; $$ LANGUAGE plpgsql SECURITY DEFINER;
然后在Flutter代码里调用这个存储过程:
await supabase.rpc('transfer_widget_to_foo');
注意:
SECURITY DEFINER会让函数以创建者权限执行,确保该权限能读写两个表;若不需要可去掉,改用调用者自身权限。
方法2:客户端分两步操作(查询+批量插入)
如果数据量不大,可以先拉取符合条件的数据,再批量插入:
// 第一步:查询widget表中符合条件的数据 final queryResult = await supabase .from('widget') .select('x, y') .gt('date', '2023-12-12'); // 建议用ISO格式日期,避免解析歧义 // 第二步:批量插入到foo表 if (queryResult.isNotEmpty) { await supabase.from('foo').insert(queryResult); }
提示:如果原表的date字段存储格式是DD-MM-YYYY,可在查询时用
filter配合日期转换逻辑,或提前在Supabase中调整字段的存储格式为标准ISO格式。
内容的提问来源于stack exchange,提问作者Davout
相关产品推荐
相关产品推荐

