PostgreSQL 15无法基于自定义类型创建条件发布,求解决办法
解决PostgreSQL逻辑复制发布中自定义枚举类型的WHERE条件问题
可行解决办法:
将枚举类型转为文本进行比较
利用类型转换把枚举值转为text内置类型,绕过自定义类型的限制,修改后的SQL语句:create publication cnt_publication_for_stk for table cnt_title where (doc_type::text = 'PRODUCT');使用枚举的内部整数序号比较
PostgreSQL枚举类型内部以整数存储,序号对应定义时的顺序(ARTICLE=1,PRODUCT=2,VOUCHER=3),可直接比较序号:create publication cnt_publication_for_stk for table cnt_title where (doc_type::int = 2);注意:后续若修改枚举定义顺序(如新增/调整值的位置),该条件会失效,需谨慎使用。
创建生成列后基于生成列过滤
先给表添加一个文本类型的生成列,再基于该列创建发布,这种方式不受枚举定义变更影响:-- 添加生成列 alter table cnt_title add column doc_type_text text generated always as (doc_type::text) stored; -- 创建发布 create publication cnt_publication_for_stk for table cnt_title where (doc_type_text = 'PRODUCT');
内容的提问来源于stack exchange,提问作者coterobarros
相关产品推荐
相关产品推荐

