请问我使用jdbc创建表,不支持roaringbitmap,驱动是postgresql,请问有什么解决方案吗 报错:ERROR: type "roaringbitmap" does not exist
DB version: PostgreSQL 12.3 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39), 64-bit OS: CentOS Linux release 7.7.1908 (Core) roaringbitmap: roaringbitmap-0.5 roaringbitmap插件github地址: https://github.com/ChenHuajun/pg_roaringbitmap 作者github地址里的安装过程写的比较简单,一路碰到不少坑,记录下来供参考。 1.查看当前安装的pg,确保只有一个版本存在 2.确认当前环境变量配置 3.确认postgres主机账号已设置密码 4.确认postgres主机账号已添加至sudoers文件中 1.安装 llvm-toolset-7-clang >= 4.0.1 2.安装 llvm5.0-devel >= 5.0 3.安装postgresql12-devel 1.make (warning不用理会,没有error即可) 2.make install(如果此步骤缺少后面的四行输出则会遇到后面的报错3) 见github地址 报错1:未配置环境变量以及未安装 postgresql12-devel 开发包 报错2:未安装依赖包 llvm5.0-devel >= 5.0 和 llvm-toolset-7-clang >= 4.0.1 报错3.make install 步骤不完整导致报错 Float8GetDatum
看下pg_roaringbitmap安装在哪个schema (psql的\dx可以看)。 默认是public,public下默认都是可见的。如果不是public,类型和所有的函数都要加上"schema名称."前缀
云数据库 PostgreSQL 提供 pg_roaringbitmap 插件,可以使用位图计算功能,提高查询性能。Roaring Bitmap 算法是将32位的 INT 类型数据划分为216个数据块(Chunk),每一个数据块对应整数的高16位,并使用一个容器(Container)来存放一个数值的低16位。Roaring Bitmap 将这些容器保存在一个动态数组中,作为一级索引。容器使用两种不同的结构:数组容器(Array Container)和位图容器(Bitmap Container)。数组容器存放稀疏的数据,位图容器存放稠密的数据。如果一个容器里面的整数数量小于4096,就用数组容器来存储值。若大于4096,就用位图容器来存储值。
操作步骤
大概使用如下:
创建插件。
CREATE EXTENSION roaringbitmap;
创建带有 RoaringBitmap 数据类型的表。
CREATE TABLE t1 (id integer, bitmap roaringbitmap);
使用 rb_build 函数插入 roaringbitmap 的数据。
--数组位置对应的 BIT 值为1
INSERT INTO t1 SELECT 1,RB_BUILD(ARRAY[1,2,3,4,5,6,7,8,9,200]);
--将输入的多条记录的值对应位置的 BIT 值设置为1,最后聚合为一个 roaringbitmap
INSERT INTO t1 SELECT 2,RB_BUILD_AGG(e) FROM GENERATE_SERIES(1,100) e;
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
本技术圈将为大家分析有关阿里云产品Hologres的最新产品动态、技术解读等,也欢迎大家加入钉钉群--实时数仓Hologres交流群32314975