PostgreSQL 18 中文参考文档(未翻译部分保留英文)🌐 切换到英文原版 →

29.4. 行过滤器 #

29.4.1. 行过滤规则
29.4.2. 行过滤限制
29.4.3. 行过滤转换
29.4.4. 分区表的行过滤
29.4.5. 初始数据同步阶段的行过滤
29.4.6. 多发布源的行过滤合并
29.4.7. 行过滤示例

发布端支持在建发布时附加 WHERE 过滤条件(行过滤器 Row Filters),从而实现仅将满足特定业务条件的数据行下发同步给订阅端:

CREATE PUBLICATION pda_pub FOR TABLE users WHERE (country = 'CN');

29.4.1. 行过滤规则 #

通过在发布时附加 WHERE 子句,可只将满足特定谓词条件的行同步到下游。

29.4.2. 行过滤限制 #

行过滤器表达式中严禁引用用户自定义函数、系统目录表或易失函数。

29.4.3. 行过滤转换 #

系统在内部对行过滤谓词进行优化重写与类型转换。

Table 29.1. 行过滤转换概述

特性说明
谓词求值在发布端 WAL 解码时逐行核验

29.4.4. 分区表的行过滤 #

若发布了分区表,行过滤条件可以定义在父表上,也可定义在各个底层分区上。

29.4.5. 初始数据同步阶段的行过滤 #

在初次同步存量基线数据时,表同步工作进程同样严格遵循行过滤谓词导出数据。

29.4.6. 多发布源的行过滤合并 #

当一个订阅订阅了多个包含同一数据表的发布时,各个发布的行过滤条件以逻辑 OR 的形式联合生效。

29.4.7. 行过滤示例 #

例如仅发布活动状态的订单:

CREATE PUBLICATION active_orders FOR TABLE orders WHERE (status = 'ACTIVE');