def _get_activity_metrics(self, key, db):
        """ Use ACTIVITY_METRICS_LT_8_3 or ACTIVITY_METRICS_8_3 or ACTIVITY_METRICS_9_2
        depending on the postgres version in conjunction with ACTIVITY_QUERY_10 or ACTIVITY_QUERY_LT_10.
        Uses a dictionnary to save the result for each instance
        """
        metrics_data = self.activity_metrics.get(key)

        if metrics_data is None:
            query = self.ACTIVITY_QUERY_10 if self._is_10_or_above(key, db) else self.ACTIVITY_QUERY_LT_10
            metrics_query = None
            if self._is_9_6_or_above(key, db):
                metrics_query = self.ACTIVITY_METRICS_9_6
            elif self._is_9_2_or_above(key, db):
                metrics_query = self.ACTIVITY_METRICS_9_2
            elif self._is_8_3_or_above(key, db):
                metrics_query = self.ACTIVITY_METRICS_8_3
            else:
                metrics_query = self.ACTIVITY_METRICS_LT_8_3

            metrics = {k: v for k, v in zip(metrics_query, self.ACTIVITY_DD_METRICS)}
            self.activity_metrics[key] = (metrics, query)
        else:
            metrics, query = metrics_data

        return {'descriptors': [('datname', 'db')], 'metrics': metrics, 'query': query, 'relation': False}