Думаю, это можно упростить до чего-то вроде:
SELECT
t.id AS topic_id,
CURRENT_DATE - t.created_at::date AS days_old
FROM topics t
ORDER BY t.created_at DESC
Также есть удобная функция reltime$time, которую можно использовать для получения относительного времени (хотя она более полезна для интервалов менее 30 дней, иначе она возвращает даты):
SELECT
t.id AS topic_id,
t.created_at AS reltime$time
FROM topics t
ORDER BY t.created_at DESC