I have a table with time series. It contains `snapshot` and `increment` value - `snapshot` means concrete value - `increment` means take previous snapshot and add increment value to get snapshot value ``` sensor_id - id of sensor ts - timestamp temp - temperature at a given ts value_type - 0 means snapshot, 1 means increment sensor_id | ts | temp | value_type sensor_X | 1 | 100 | 0 sensor_X | 2 | 5 | 1 sensor_X | 3 | -2 | 1 sensor_X | 4 | 95 | 0 sensor_Y | 4 | 90 | 0 sensor_Y | 5 | -5 | 1 ``` My goal is to build time series view from table ``` 1| 2| 3| 4| 5| sensor_X 100| 105| 103| 95| | sensor_Y | | | 90| 85| ``` user queries data by ts range and sensor_id: ``` show me sensor temperature where sensor_id starts with sensor_0* and ts in range (2023-01-20, 2023-01-23) ``` I try to implement aggregate function ```sql -- thisValue, thisValueType, nextValue, nextValueType CREATE OR REPLACE FUNCTION calculate_snapshot_internal(bigint, int, bigint, int) returns bigint language sql as $$ select case when $3 is null then null -- metric value explicitly set to null, means it removed when $4 = 1 or $4 = 2 then $3 -- next value is SNAPSHOT or FULL_SNAPSHOT, just set it when $4 = 0 and $1 is not null then $1 + $3 -- next value is INCREMENTAL, add it to current SNAPSHOT end $$; CREATE aggregate calculate_snapshot (bigint, int) ( sfunc = calculate_snapshot_internal, stype = bigint -- initcond = null We can do this simply by omitting the initcond phrase, so that the initial state condition is null ); ``` and query ```sql select sensor_id, calculate_snapshot(value, valueType) OVER (PARTITION BY sensor_id ORDER BY ts) as snapshot_value from metric_table; ``` I can't execute `CREATE aggregate calculate_snapshot ` error: ``` [42883] ERROR: function calculate_snapshot_internal(bigint, bigint, integer) does not exist ``` Don't understand how is it supposed to work.