Supabase 独立开发<七>:Database Extension

4 阅读2分钟

Supabase 的 Database 是一个 postgres,那么自然就可以安装 postgres 的扩展,postgres 生态有数千个扩展,不过 Supabase 官方的 Database 限制了扩展安装的来源:

  • 其官方提供的50个左右扩展
  • database.dev 中的扩展,这是一个 supabase 扩展包管理器,目前还在早期
  • 你自己开发的纯 SQL 扩展

希望 Supabase 早点提供安装更多自定义插件的能力,这篇文章将会挑选几个我认为比较有用的插件。

HTTP 客户端:pg_net

pg_net 这个扩展非常有用,可以用来发送 HTTP 请求,比如调用外部的 API,对于简单的情况,比如 查询外部的汇率 API 的,又不想做一个 Edge Function,完全可以使用这个来实现一个数据库函数,从 Supabase 客户端直接调用。

周期任务:pg_cron

这个扩展用于设置周期性或定时的任务,这个扩展和上面提到的 pg_net 可以配合使用。完成下面类似的任务:比如每天凌晨更新汇率,或者每天晚上更新天气预报,或者每5分钟检查并更新文生视频的任务状态。另外,通过设置一个周期任务,使用 pg_net 发送请求到 Edge Function 端点,可以周期性调用你的 Edge Function,从而实现正常后端服务的周期任务的能力。

向量存储:vector

vector 是一个用于 PostgreSQL 的向量数据库扩展,它允许您在 PostgreSQL 数据库中存储和查询向量数据。vector 提供了向量数据的索引和查询功能,它支持多种向量距离度量,如欧氏距离、余弦相似度等,并且提供了高效的向量搜索算法。通过这个使用这个扩展,可以用来实现简单的 RAG 的能力,做 AI 知识库的时候有用。

消息队列:pgmq

这是一个数据库内部的消息队列,用的不多,原因也很简单,消息队列的消费者往往是需要长时间运行,所以其和 Edge Function 天生不适合。但是当你有一个自己的后端服务器时,其作用就被放大了。相比起你单独部署一个 Kafka 或者 Redis 来获得消息队列的能力,使用 pgmq 的好处有两个:首先你不需要单独维护 Kafka 或者 Redis,其次开发时 pgmq 可以放在事务中,无需考虑分布式事务的情况。