集計関数 を使用します :
select
usr_id,
name,
array_agg(tag_id) as tag_arr
from users
join tags using(usr_id)
group by usr_id, name
または
select
u.usr_id,
name,
array(
select tag_id
from tags t
where t.usr_id = u.usr_id
) as tag_arr
from users u
2番目のオプションは単純な1ソースクエリですが、最初のオプションはより一般的であり、関連するテーブルから複数の集計が必要な場合に特に便利です。また、最初のバリアントは、テーブルが大きいほど高速になるはずです。
パフォーマンスを向上させるために、usr_id
両方のテーブルの列にインデックスを付ける必要があります。通常はusers.usr_id
は主キーですが、参照列のインデックスも役立つことを忘れてしまうことがあります。