Postgres Changes 新增 AND 过滤器、新操作符和列选择功能

Postgres Changes 新增 AND 过滤器、新操作符和列选择功能

💡 原文英文,约600词,阅读约需3分钟。
📝

内容提要

Supabase 的 Postgres Changes 功能新增三项改进:支持多列组合过滤、更多过滤操作符(如 like、is、正则等),以及列选择以仅返回所需字段。这些功能可减少消息和带宽消耗,降低计费成本。需注意列选择需客户端库 2.109.0+,DELETE 事件仅含主键,且暂不支持 OR 组合。

🔎

延伸解读

组合过滤的实际价值

此前过滤器只能针对单列,开发者常需订阅整个表再在客户端丢弃无关数据,既浪费带宽又增加处理逻辑。现在支持多列组合过滤(以逗号分隔,条件间为AND关系),例如同时匹配状态和团队,可直接在服务端过滤,减少消息量和客户端负担。这一改进对实时看板、工单系统等场景尤为实用。

列选择与计费优化

列选择功能允许订阅时指定返回字段,未指定的列不会出现在payload中,从而减少传输字节数。由于Realtime按消息数和出站流量计费,这能直接降低使用成本。但需注意,该功能为可选,现有订阅默认仍返回整行,需显式添加select选项才能生效。

使用限制与注意事项

列选择要求客户端库版本不低于2.109.0,且所选列必须对订阅角色可见,Row Level Security依然生效。DELETE事件仅携带主键,因此无法基于其他列过滤删除操作。当前仅支持AND组合,不支持OR,且数组、JSON包含、全文搜索和范围操作符尚未覆盖。

Q&A

Postgres Changes 新增了哪些功能?

Postgres Changes 新增了三个功能:支持多列组合过滤、更多过滤操作符(如 like、ilike、is、match、imatch、isdistinct 等),以及列选择功能,可以只返回需要的字段。

如何在 Postgres Changes 中实现多列组合过滤?

在 filter 参数中用逗号分隔多个条件,每个条件都必须匹配(AND 逻辑)。例如:filter: 'status=eq.open,team=eq.billing' 表示同时匹配 status 为 open 且 team 为 billing 的行。

Postgres Changes 新增了哪些过滤操作符?

新增了 like 和 ilike 用于模式匹配,is 用于 null 和布尔检查,match 和 imatch 用于 POSIX 正则表达式,以及 isdistinct 用于 NULL 安全的不等比较。还可以用 not. 前缀来反转条件。

如何使用列选择功能来减少返回的数据量?

在订阅配置中添加 select 选项,并传入一个包含所需列名的数组。例如:select: ['id', 'subject', 'updated_at']。这样事件负载中只会包含这些列,但主键始终会包含在内。

Postgres Changes 的过滤和列选择如何影响计费?

Realtime 按消息和出口流量计费。过滤掉的事件不会发送给订阅者,从而节省消息数;列选择减少了每个事件传输的字节数,从而降低出口流量。因此,这些功能可以减少计费使用量,降低相同工作负载的成本。

使用 Postgres Changes 的列选择功能有什么注意事项?

列选择需要 @supabase/supabase-js 2.109.0 或更高版本。列出的列必须对订阅角色可选中,并且行级安全(RLS)仍然适用。另外,DELETE 事件只包含主键,因此无法对删除事件进行列过滤。

Postgres Changes 目前不支持哪些过滤功能?

目前不支持数组和 JSON 包含、全文搜索、范围操作符,以及 OR 组合。这些功能尚未计划实现。

🏷️

标签

➡️

继续阅读