作者
digoal
日期
2022-03-23
标签
PostgreSQL , view , base relation , 权限检测 , invoker , owner , user , definer
获取局部相似的例子
- 一个JSON字段, 里面有若干KEY, 每一行的KEY的个数、内容、KEY本身都可能不一样.
- KEY的个数可能超过1000, 超出单行可容纳的最大列数.
- KEY可能在业务使用过程中动态增加.
获取局部相似:
- 1、要求包含某个KEY,
- 2、要求按这个KEY的VALUE(数值、时间等可比较类型)取出相近的记录,
- 3、按相似度排序(即离值近的优先输出, 需要<->
操作符的支持, 用到GiST索引), 并limit N条.
1、因为每一行的KEY的个数、内容、KEY本身都可能不一样. 而且KEY的个数可能超过1000, 超出单行可容纳的最大列数. KEY可能在业务使用过程中动态增加. 所以类型只能选择JSON
2、要求包含某个KEY,
如果返回的记录数非常多, 后面涉及到排序的记录就会非常多, 排序耗费CPU.
3、要求按这个KEY的VALUE(数值、时间等可比较类型)取出相近的记录,
如果加索引, 每个可能的KEY都要加表达式索引, 索引可能会特别多. 如果写入频繁, 写入的延迟会因为每增加1个索引而变长, 写入性能大打折扣.
https://www.postgresql.org/docs/current/functions-json.html
create index idx_t_1 on t using btree ((jsb->>'key_name')::numeric) where jsb ? 'key_name'; 或者 create extension btree_gist; create index idx_t_1 on t using gist ((jsb->>'key_name')::numeric) where jsb ? 'key_name'; select * from t where jsb ? 'key_name' order by (jsb->>'key_name')::numeric <-> 1.234 limit 10;
复制
4、按相似度排序(即离值近的优先输出, 需要<->
操作符的支持, 用到GiST索引), 并limit N条.
可以使用btree_gist 插件GiST索引, 也可以正反各取N条再返回.
create table tbl (id int, info text); insert into tbl select generate_series(1,1000); create extension btree_gist; create index idx_tbl on tbl using gist(id); postgres=# select * from tbl order by id <-> 100 limit 5; id | info -----+------ 100 | 101 | 99 | 102 | 98 | (5 rows) 或者 drop index idx_tbl; create index idx_tbl on tbl using btree(id); postgres=# with a as (select * from tbl where id>=100 order by id limit 5), b as (select * from tbl where id<100 order by id desc limit 5) select * from (select * from a union all select * from b) t order by abs(id-100) limit 5; id | info -----+------ 100 | 101 | 99 | 98 | 102 | (5 rows)
复制
期望 PostgreSQL 增加什么功能?
PolarDB for PostgreSQL云原生分布式开源数据库
PostgreSQL 解决方案集合
德哥 / digoal's github - 公益是一辈子的事.
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
外国CTO也感兴趣的开源数据库项目——openHalo
小满未满、
1958次阅读
2025-04-21 16:58:09
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
382次阅读
2025-04-15 14:48:05
转发有奖 | PostgreSQL 16 PGCM高级认证课程直播班招生中!
墨天轮小教习
235次阅读
2025-04-14 15:58:34
中国PostgreSQL培训认证体系新增PGAI应用工程师方向
开源软件联盟PostgreSQL分会
190次阅读
2025-05-06 10:21:13
4月“墨力原创作者计划”获奖名单公布!
墨天轮编辑部
189次阅读
2025-05-13 16:21:59
QPlus V6.3 更新,新增PostgreSQL与PolarDB PG支持,OceanBase 容灾管理重磅上线
沃趣科技
183次阅读
2025-05-13 09:39:27
华象新闻 | PostgreSQL 18 Beta 1、17.5、16.9、15.13、14.18、13.21 发布
严少安
169次阅读
2025-05-09 11:34:10
PG生态赢得资本市场青睐:Databricks收购Neon,Supabase融资两亿美元,微软财报点名PG
老冯云数
160次阅读
2025-05-07 10:06:22
SQL 优化之 OR 子句改写
xiongcc
148次阅读
2025-04-21 00:08:06
告别老旧mysql_fdw,升级正当时
NickYoung
128次阅读
2025-04-29 11:15:18
热门文章
阿里巴巴的使命、愿景、核心价值观
2021-01-04 67774浏览
MacOS 关闭和开启虚拟内存(swap)
2022-01-20 17958浏览
[珍藏级] PostgreSQL ssl 证书配置 - 防止中间攻击者 - 以及如何使用证书无密码登录配置cert
2020-06-19 16560浏览
PostgreSQL md5hash插件 - 128bit 存储,压缩空间、提升效率
2019-11-08 14381浏览
产品与运营-OKR的设计、总结、复盘、规划、组织保障和考核例子
2022-01-20 13419浏览
最新文章
PostgreSQL 15 preview - PostgreSQL 15 pg_stat_statements 增加对temp file blocks io timing的统计, 增加JIT的统计.
2022-01-20 273浏览
德说-第92期, 怎么解决躺平|不想奋斗?
2022-01-20 303浏览
PostgreSQL 增量物化视图插件 - pg_ivm incremental materialized view maintenance
2022-01-20 1415浏览
PostgreSQL 15 preview - ARM多核适配 性能提升 - Use ISB as a spin-delay instruction on ARM64
2022-01-20 803浏览
PostgreSQL 15 preview - recovery(包括崩溃恢复、逻辑流复制、物理流复制、归档恢复) 加速, 支持异步prefetch 预读接下来要恢复的wal record相关的data block到shared buffer
2022-01-20 1231浏览