我们有一个表结构,在同一个表中包含父记录和子记录。它们通过引用父项的列 ( parentId ) 进行引用(在顶级父记录中为 null)。此外,我们有一个请求的日期列,我们通过它进行所有查询,但唯一具有此值的记录是父记录。
由于我们所有的查询最初都在过滤父结果并使用此日期,因此我们希望在此日期范围内对表进行分区,但要理解这是不可能的,因为子记录的记录中有空值。
除了在数据库中的每一个子记录上创建一个“虚拟”值(一些永远不会在我们的过滤器中捕获的任意日期)之外,我们还有什么其他选择?是否不可能以某种方式为我们从未查询过的所有空值创建一个单独的分区?
PostgreSQL 11 允许您为范围分区表创建一个默认分区,该分区将接收 NULL 值。
如果要防止现有分区未覆盖的其他行进入该默认表,则可以添加要求列为 NULL 的检查约束。