Como obtenho a cardinalidade de um multirange?
Estou usando range_agg()
para agregar intervalos, o que mescla intervalos se eles forem contínuos ou retorna o que parece ser uma matriz de intervalos se os intervalos forem descontínuos.
Quero detectar se há alguma lacuna no multirange e queria usar cardinality()
para isso. Uma cardinalidade de 1 significaria nenhuma lacuna, uma cardinalidade de 2 significa 1 lacuna, etc.
Entretanto, a cardinalidade não é definida em um multirange, porque um multirange não é tecnicamente uma matriz:
with x(a) as (
values
(daterange(date '2024-01-30', date '2024-03-31', '[)')),
(daterange(date '2024-04-01', date '2024-04-30', '[)'))
)
select cardinality(range_agg(a)) from x;
retorna
ERROR: function cardinality(datemultirange) does not exist
LINE 6: select cardinality(range_agg(a)) from x;
Provavelmente posso implementar a função sozinho com unnest()
e contando o número de linhas resultantes, mas estou curioso para saber se há outras boas soluções.