Supabase中存储过程、RPC、数据库函数等概念的区别确认
我具备基础数据库编程知识,计划通过Flutter应用访问Supabase数据库,想用Stored procedures实现统一的函数化访问。开发前要确认方法正确性,但碰到几个易混淆的术语:
- 看到指向所需功能的Postgres functions
- 文章指出RPC是调用它们的方式
- 文章提到Database functions和Edge functions
- 文档提及Database triggers似乎是触发Postgres functions的方式(相关链接404)
以下是对相关结论的验证:
在此场景下Stored procedures、Postgres functions、Database functions是否同义?
是,在Supabase的语境里这三个术语基本等同。Postgres早期曾区分function和procedure,但如今function已能覆盖绝大多数procedure的功能;Supabase中的Database functions就是指运行在Postgres实例上的自定义函数/存储过程,所以在你这个Flutter调用数据库函数的场景下,三者指的是同一个对象。RPC是否为外部调用方式?
完全正确。RPC(Remote Procedure Call)就是Supabase提供给外部客户端(比如你的Flutter应用)调用Postgres数据库函数的标准方式,你在Flutter中通过Supabase SDK的rpc()方法就能触发对应的数据库函数,本质就是远程调用数据库端的自定义逻辑。Database triggers是否为自动触发函数的方式?
对的。Database triggers是Postgres的原生功能,你可以配置触发器在特定数据库事件(比如数据插入、更新、删除)发生时,自动触发指定的Postgres函数,无需外部主动调用,属于数据库内部的自动执行逻辑。Edge functions是否为高阶TypeScript AWS Lambda风格的外部功能?
没错。Edge functions是Supabase提供的边缘Serverless函数,用TypeScript编写,运行模式和AWS Lambda类似,但部署在更靠近用户的边缘节点,适合处理无需直接操作数据库、对延迟要求高的逻辑(比如请求预处理、认证扩展等),属于独立于Postgres数据库的外部功能。Supabase functions是否指Edge functions?
是的,Supabase官方文档中提到的"Supabase functions"通常就是指Edge functions。而运行在数据库内的函数会明确标注为Database functions或Postgres functions,不会直接用"Supabase functions"指代。
内容的提问来源于stack exchange,提问作者Francois Bertrand

