Oracle vs PostgreSQL,研发注意事项(8)- Oracle数据比较规则
PostgreSQL与Oracle在数据比较上存在差异,本节简单介绍Oracle的数据比较原则. 一、数值型所有负数小于0或者整数,如-1 < 100/-100 < -1.浮点数NaN(not a number)比其他所有数值都要大,但等于自身即NaN. 二、日期型较晚的日期大于较早的日期.比如2005年3月29日小于2006年1月18日. 三、字符型字符值的比较基于两个度量:A
PostgreSQL DBA(36) - PG 12 Inlined WITH queries
PG 12的新特性Inlined WITH queries (Common table expressions),描述如下: Common table expressions (aka WITH queries) can now be automatically inlined in a query if they a) are not recursive, b) do not have a
PostgreSQL DBA(35) - CTE
CTE(Common Table Expressions)是指使用WITH语句定义的通用表表达式。如: testdb=# explain verbose WITH t1 AS ( SELECT * FROM t_w1 WHERE t_w1.id % 4 = 0 ) SELECT * FROM t1 JOIN t_w2 as t2 ON t2.id = t1.id;
PostgreSQL 源码解读(200)- PG 12 Pluggable storage for tables接口浅析
PostgreSQL 12 beta 1 已于近期发布,此版本包含了众多新特性,其中可插拔表存储接口允许创建和使用不同的表存储方式,本节简单探究了“Pluggable storage for tables”的实现。
Polyphase Merge Sort
Polyphase Merge Sort是一种External Sort算法,给定N个Tapes,只需要1个Tapes作为Output设备,而且读写均为顺序读写,对于Disk/Tapes等外存设备比较友好. 在介绍Polyphase Merge Sort之前,有必要先行简要介绍Merge Sort/Balanced N-way Merge Sort.
REPLACEMENT SELECTION SORT
REPLACEMENT SELECTION SORT
PostgreSQL 源码解读(199)- 查询#114(排序#7 - inittapes&dumptuples)
本节继续介绍排序的实现,主要内容是tuplesort_puttupleslot->puttuple_common调用的inittapes和dumptuples函数.
PostgreSQL 源码解读(198)- 查询#113(排序#6 - Tuplesortstate)
本节继续介绍排序的实现,上一节介绍了tuplesort_performsort->mergeruns函数,下面介绍与排序相关的重要数据结构:Tuplesortstate.
PostgreSQL 源码解读(197)- 查询#112(排序#5 - mergeruns)
本节继续介绍排序的实现,上一节介绍了tuplesort_performsort,下面介绍该函数调用的mergeruns函数,该函数归并所有已完成的初次runs.
PostgreSQL 源码解读(196)- 浮点数比较
众所周知,计算机是以二进制方式存储数据,而浮点数在序列化为二进制时可能会出现精度丢失(IEEE 754标准),对于数据库实现来说,会引入一个问题,那就是那么两个浮点数之间在比较时在数据库是如何实现的?
PostgreSQL 源码解读(195)- 查询#111(排序#4 - 实现)
本节继续介绍排序的实现,上一节介绍了tuplesort_begin_heap/tuplesort_puttupleslot,本节介绍的函数是tuplesort_performsort.
PostgreSQL 源码解读(194)- 查询#110(排序#3 - 实现)
本节继续介绍排序的实现,上一节介绍了ExecSort,本节介绍该函数中调用的排序的具体实现函数,本节是第一部分,包括tuplesort_begin_heap/tuplesort_puttupleslot.
PostgreSQL 源码解读(193)- 查询#109(排序#2 - ExecSort)
本节继续介绍排序的实现,上一节介绍了ExecInitSort,本节主要介绍排序的实现函数ExecSort.
PostgreSQL 源码解读(192)- 查询#108(排序#1 - ExecInitSort)
本节介绍排序的实现,排序的实现函数是ExecSort,与聚合函数类似,也有要一个初始化的过程ExecInitSort,本节主要介绍该函数的实现.
PostgreSQL 源码解读(191)- 查询#107(聚合函数#12 - agg_retrieve_direct)
本节继续介绍聚合函数的实现,主要介绍了不使用Hash算法的情况下聚合函数的实现,在这种情况下会先排序后执行聚合,在ExecAgg节点执行前,已完成排序的操作.下面介绍在已完成排序的情况下聚合的实现,主要实现函数是ExecAgg->agg_retrieve_direct.
PostgreSQL 源码解读(190)- 查询#106(聚合函数#11 - finalize_aggregate)
本节继续介绍聚合函数的实现,主要介绍了agg_retrieve_hash_table函数中与投影相关的实现逻辑,主要是finalize_aggregates->finalize_aggregate.
PostgreSQL 源码解读(189)- 查询#105(聚合函数#10 - agg_retrieve_hash_table)
本节继续介绍聚合函数的实现,主要介绍了agg_retrieve_hash_table函数中与投影相关的实现逻辑,包括函数prepare_projection_slot/finalize_aggregates/project_aggregates.
PostgreSQL 源码解读(188)- 查询#104(聚合函数#9 - ExecAgg Review)
本节对ExecAgg函数进行初步的Review,梳理相关实现逻辑.
PostgreSQL 源码解读(187)- 查询#103(聚合函数#8 - Struct Review)
本节继续介绍聚合函数的实现,主要是Review涉及到的相关数据结构.包括AggState/AggStatePerAgg/AggStatePerTrans/AggStatePerGroup/AggStatePerPhase/AggStatePerHash.
PostgreSQL 源码解读(186)- 查询#102(聚合函数#7-advance_aggregates)
本节继续介绍聚合函数的实现,主要是函数ExecAgg->agg_fill_hash_table->advance_aggregates函数的处理逻辑. 该函数为每一个输入tuple推进每个聚合的转换状态,比如avg聚合,则把tuple中相应的列值加入到总和中,同时计数器加1,结果值会保存在内存上下文中,返回值是aggstate->phase->evaltrans->resvalue & aggstate->phase->evaltrans->resnull.