1 pg_ivm简介

1.1 项目地址

https://gitcode.com/gh_mirrors/pg/pg_ivm/?utm_source=artical_gitcode&index=bottom&type=card&&isLogin=1

1.2 注意事项

如果您是通过 rpm 或 deb 包安装的 PostgreSQL,您将需要安装开发包(例如,postgresql14-devel 或 postgresql-server-dev-14)。

重要提示: 如果您打算在非默认或自定义构建的 PostgreSQL 上使用 pg_ivm,请别忘了设置 PG_CONFIG 环境变量(使用 make PG_CONFIG=... 命令)或将 pg_config 命令的路径添加到 PATH 环境变量中。更多详情请参阅这里

接着,执行创建扩展命令。

1.3 下载地址

1)github下载

git clone https://github.com/sraoss/pg_ivm.git
cd pg_ivm
make
make install

2)rpm下载与安装

下载地址

https://download.postgresql.org/pub/repos/yum/15/redhat/rhel-7.9-x86_64/

 安装

2 pg_ivm使用

2.1 创建扩展

SELECT name, default_version,installed_version FROM pg_available_extensions where  name ='pg_ivm';

 CREATE EXTENSION IF NOT EXISTS pg_ivm;

2.2 限制

目前,IMMV 的视图定义可以包含内连接、DISTINCT 子句、某些内置的聚合函数、FROM 子句中的简单子查询、EXISTS 子查询以及简单的公用表表达式(WITH 查询)。内连接(包括自连接)是被支持的,但外连接不支持。支持的聚合函数包括 count、sum、avg、min 和 max。其他聚合函数、包含聚合或 DISTINCT 子句的子查询、除 FROM 子句外的其他位置的子查询、窗口函数、HAVINGORDER BYLIMIT/OFFSETUNION/INTERSECT/EXCEPTDISTINCT ONTABLESAMPLEVALUES 以及 FOR UPDATE/SHARE 不能在视图定义中使用。

基表必须是简单表。视图、物化视图、继承父表、分区表、分区以及外部表不能被使用。

任何系统列都不能包含在视图定义查询中。 目标列表中不能包含以 __ivm_ 开头的列名。

视图中目标列表使用的数据类型必须有默认的操作符类以供 btree 访问方法使用。例如,jsonxml 或 point 类型不能出现在目标列表中。

逻辑复制不支持,即当发布节点上的基表被修改时,基于这些基表定义的订阅节点上的 IMMV 不会被更新。

2.3 语法

使用 create_immv 函数来创建 IMMV。

create_immv(immv_name text, view_definition text) RETURNS bigint

2.4 例子

SELECT create_immv('sales_test4', 'select t1.*,t2.sku_code,t2.create_time ctime from ods.ods_goods_goods_spu_rt t1 inner join ods.ods_goods_goods_sku_rt t2 on t1.spu_code = t2.spu_code

where t1.tenant_id = 153755 and t2.tenant_id = 153755');

 posted on 2025-03-25 08:53  xibuhaohao  阅读(68)  评论(0)    收藏  举报