Użyj funkcji agregującej :
select
usr_id,
name,
array_agg(tag_id) as tag_arr
from users
join tags using(usr_id)
group by usr_id, name
lub konstruktor tablic z wyników podzapytania:
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
Druga opcja to proste zapytanie z jednego źródła, podczas gdy pierwsza jest bardziej ogólna, szczególnie wygodna, gdy potrzebujesz więcej niż jednej agregacji z powiązanej tabeli. Ponadto pierwszy wariant powinien działać szybciej na większych stołach.
Zauważ, że dla lepszej wydajności usr_id
kolumny w obu tabelach powinny być indeksowane. Chociaż zazwyczaj users.usr_id
jest kluczem podstawowym, czasami można zapomnieć, że indeks kolumny odniesienia jest również przydatny.