PostgreSQL 11 preview - MERGE 语法支持与CTE内支持,兼容SQL:2016 , 兼容 Oracle
背景 PostgreSQL 11 支持了merge 语法,兼容SQL 2016标准。并且支持用于CTE语法中。 merge 语法常用于合并数据(将 某个源表、values表达式、QUERY、临时表等 合并到某个目标表中)。 例如,将源表的变更日志,合并到物化视图中。 PostgreSQL 除了使用inser...
背景 PostgreSQL 11 支持了merge 语法,兼容SQL 2016标准。并且支持用于CTE语法中。 merge 语法常用于合并数据(将 某个源表、values表达式、QUERY、临时表等 合并到某个目标表中)。 例如,将源表的变更日志,合并到物化视图中。 PostgreSQL 除了使用inser...
背景 我们现在业务场景,有对筛选结果进行去重和打散的需求,比如每个品牌的商品只能出现不超过10个。 目前我们是在业务层进行处理的,效率比较低。 PGSql有没有更好的方式来支持对结果的去重和打散呢? PostgreSQL SQL功能强大,有很多种方法可以实现这类业务需求的高效检索。比如 1、递归 2、窗...
背景 PostgreSQL 11 JIT,目前支持tuple deform(将磁盘上的tuple转换为内存中TUPLE格式),以及表达式(select, where, 等语义中的表达式,操作符运算,UDF等)的动态编译。 对海量数据的计算(并且表达式或TUPLE DEFORM已成为瓶颈时)有加速效果。 特别适...
背景 在任意维度查询(ADHoc)的场景中,有诸多技术手段来保证查询的性能,比如rum索引,GIN倒排索引,BLOOM FILTER索引。又比如多个索引的bitmap 合并scan。 例子: 《PostgreSQL ADHoc(任意字段组合)查询 与 字典化 (rum索引加速) - 实践与方案1》 《用Po...
背景 合并更新的应用非常广泛,存在则更新,不存在则写入。 但是在某些场景中,存在并不一定要更新,原因是新的内容可能和老的内容完全一致。这种更新操作是完全没有必要的。 因为PG是多版本的,更新会产生新的TUPLE版本,如果这种没必要的更新很多,只会给数据库带来额外的负担同时影响性能。特别体现在批量操作中。 例...
背景 PostgreSQL中数据的扫描方法很多,常见的有: 1、全表顺序扫描(seqscan) 2、索引+回表扫描(index scan) 3、索引扫描(index only scan) 4、bitmap扫描(bitmap index + block sorted heap scan) 那么对于同一张表...
背景 Linux下面可以使用smartctl , badblocks检查是否有坏块。 Win下面可以使用HD Tune。 1 smartmontools apt install smartmontools https://www.aliyun.com/jiaocheng/120499.html s...
背景 一个较大的数据库,如何只恢复一部分数据(例如只恢复某个DB)。 如果访问有坏块的表。 如何从无法启动的数据库中,恢复到有意义的数据。 如何正确的进行备份。 如何恢复到过去的某个时间点。 恢复部分数据库 《PostgreSQL Selectivity Tablespace PITR - 部分表空间...
背景 在云栖社区的问答区,有一位网友提到有一个问题: 表里相似数据太多,想删除相似度高的数据,有什么办法能实现吗? 例如: 银屑病怎么治? 银屑病怎么治疗? 银屑病怎么治疗好? 银屑病怎么能治疗好? 等等 解这个问题的思路 1. 首先如何判断内容的相似度,PostgreSQL中提...