DECLARE schema_name TEXT := 'top_product_storage'; last_updated_datetime TIMESTAMP; updated_interval INTERVAL; partition_name TEXT; found_partitions_to_drop BOOLEAN := false;BEGIN DROP TABLE IF EXISTS tt_partitions; CREATE TEMP TABLE tt_partitions ( name TEXT, lower_bound BIGINT, upper_bound BIGINT ); INSERT INTO tt_partitions SELECT name, lower_bound::BIGINT, upper_bound::BIGINT FROM partitioning.get_non_empty_table_partitions(schema_name, table_name); FOR partition_name IN (SELECT name FROM tt_partitions ORDER BY lower_bound DESC OFFSET keep_partitions_number) LOOP IF (NOT found_partitions_to_drop) THEN EXECUTE format('SELECT updated_at FROM %I.%I ORDER BY rev DESC LIMIT 1', schema_name, partition_name) INTO last_updated_datetime; IF (last_updated_datetime IS NOT NULL) THEN updated_interval := LOCALTIMESTAMP - last_updated_datetime; IF (updated_interval > old_data_interval) THEN RAISE NOTICE 'Partition %.% with last updated date % is the latest partition to be dropped', schema_name, partition_name, last_updated_datetime; found_partitions_to_drop := true; END IF; END IF; END IF; IF (found_partitions_to_drop) THEN RAISE NOTICE 'Drop partition %.%', schema_name, partition_name; EXECUTE format('DROP TABLE %I.%I', schema_name, partition_name); END IF; END LOOP;END