数据库函数
数据库函数是运行在 PostgreSQL 内部的可复用逻辑。你可以把复杂 SQL、事务性写入、聚合统计、权限辅助判断等能力封装为函数,再通过 SQL、服务端直连或 HTTP API 的 RPC 方式调用。
数据库函数适合靠近数据层执行的逻辑,但不适合执行耗时外部调用。涉及第三方接口、长任务或复杂业务编排时,建议放在云函数或云托管中处理。
适用场景
| 场景 | 说明 |
|---|---|
| 复用复杂查询 | 将多表关联、过滤、排序和聚合封装为一个函数 |
| 事务性写入 | 在一个数据库事务内完成多表写入或状态流转 |
| 数据校验 | 在写入前检查库存、额度、状态等业务约束 |
| RPC API | 通过 HTTP API 调用函数,向前端或第三方系统暴露受控能力 |
| 权限辅助 | 封装团队成员、资源归属等权限判断逻辑 |
创建数据库函数
可以通过控制台或 SQL 语句创建数据库函数。当前云开发控制台的 PostgreSQL 管理界面与 Supabase 控制台保持一致,适合查看、创建和管理数据库函数。
- 控制台操作
- SQL 语句操作
- 进入 云开发平台/PostgreSQL 数据库 管理页面。
- 选择目标环境,进入数据库管理界面。
- 打开「数据库函数」管理页面。
- 点击「新建函数」。
- 填写函数名称、Schema、参数、返回类型和函数体。
- 按函数逻辑选择语言:简单 SQL 表达式或查询优先选择
LANGUAGE SQL;需要变量、条件分支、异常处理或多条语句时选择LANGUAGE plpgsql。 - 按需配置函数稳定性、权限模式等选项,确认后提交。
控制台适合创建常规函数和查看已有函数。涉及迁移脚本、批量发布或需要代码评审的变更时,建议使用 SQL 语句统一管理。
默认优先使用 LANGUAGE SQL 创建函数。只包含 SQL 表达式或查询的函数不需要过程语言,使用 LANGUAGE SQL 更直接,也更容易审查权限和执行行为。
create or replace function public.add_numbers(a integer, b integer)
returns integer
LANGUAGE SQL
stable
as $$
select a + b;
$$;
调用函数:
select public.add_numbers(1, 2);
stable 表示函数在同一次语句执行期间对相同输入返回相同结果。纯计算或只读查询通常可以标记为 stable。