Usa la funzione di aggregazione :
select
usr_id,
name,
array_agg(tag_id) as tag_arr
from users
join tags using(usr_id)
group by usr_id, name
o un costruttore di array dai risultati di una sottoquery:
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
La seconda opzione è una semplice query da un'origine mentre la prima è più generica, particolarmente utile quando è necessario più di un aggregato da una tabella correlata. Inoltre, la prima variante dovrebbe essere più veloce su tavoli più grandi.
Nota che per prestazioni migliori il usr_id
le colonne in entrambe le tabelle devono essere indicizzate. Mentre in genere users.usr_id
è una chiave primaria, a volte si può dimenticare che anche l'indice della colonna di riferimento è utile.