sql >> Base de Datos >  >> RDS >> PostgreSQL

Función agregada de PostgreSQL sobre el rango

Hay dos modificaciones a su intento. Primero, no creo que pueda usar un operador como SFUNC, por lo que necesita definir una función con nombre para hacer la intersección y usarla.

CREATE or REPLACE FUNCTION int_tsrange(a tsrange, b tsrange)
   returns tsrange language plpgsql as 
      'begin return a * b; end';

En segundo lugar, el valor predeterminado para un rango es el rango vacío, por lo que la intersección siempre estará vacía. Debe inicializar el rango a un rango infinito '[,]' para comenzar el agregado. La definición agregada se ve así:

CREATE AGGREGATE intersection ( tsrange ) (
    SFUNC = int_tsrange,
    STYPE = tsrange,
    INITCOND = '[,]'
);