PostgresqlでOne to Manyを出力する方法でちょっと悩んだので、念のため記事に残します

joinしたりサブクエリなど方法は色々あるのですが、サブクエリの方が見通しが良い、との判断のもとこのような実装を行いました

SELECT
	messages.id,
	messages.body,
	messages.created_at,
	messages.updated_at,
	(SELECT ARRAY_AGG(files.name) FROM files where message_id = messages.id) as files -- ここにサブクエリ追加
FROM
	messages
-- この辺色々あるけど省略
WHERE
	messages.topic_id = 1

参考記事

Multiple array_agg() calls in a single query