PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

PostgreSQL-Aggregatfunktion über Bereich

Es gibt zwei Änderungen an Ihrem Versuch. Erstens glaube ich nicht, dass Sie einen Operator als SFUNC verwenden können, also müssen Sie eine benannte Funktion definieren, um die Schnittmenge auszuführen, und diese verwenden.

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

Zweitens ist der Standardwert für einen Bereich der leere Bereich – die Schnittmenge ist also immer leer. Sie müssen den Bereich auf einen unendlichen Bereich initialisieren '[,]' um das Aggregat zu beginnen. Die Aggregatdefinition sieht dann so aus:

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