Use a função agregada :
select
usr_id,
name,
array_agg(tag_id) as tag_arr
from users
join tags using(usr_id)
group by usr_id, name
ou um construtor de array dos resultados de uma subconsulta:
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
A segunda opção é uma consulta simples de uma fonte, enquanto a primeira é mais genérica, especialmente conveniente quando você precisa de mais de uma agregação de uma tabela relacionada. Além disso, a primeira variante deve ser mais rápida em tabelas maiores.
Observe que, para melhor desempenho, o
usr_id
colunas em ambas as tabelas devem ser indexadas. Embora normalmente users.usr_id
é uma chave primária, às vezes pode-se esquecer que o índice da coluna de referência também é útil.