Använd aggregationsfunktionen :
select
usr_id,
name,
array_agg(tag_id) as tag_arr
from users
join tags using(usr_id)
group by usr_id, name
eller en arraykonstruktor från resultaten av en underfråga:
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
Det andra alternativet är en enkel fråga med en källa medan den första är mer generisk, särskilt praktiskt när du behöver mer än ett aggregat från en relaterad tabell. Dessutom bör den första varianten vara snabbare på större bord.
Observera att usr_id
för bättre prestanda kolumner i båda tabellerna ska indexeras. Medan vanligtvis users.usr_id
är en primärnyckel, ibland kan man glömma att indexet för referenskolumnen också är användbart.