Postgresql : concat() la fonction de string aggrégation
Voici comment créer la fonction d'aggréation concat sur les anciennes versions de postgresql (testé ici sur postgres 8.4)
Connectez vous à la base cible avec psql.
Ensuite créez la fonction de base sconcat :
CREATE FUNCTION sconcat(text, text) RETURNS text
LANGUAGE sql
AS $_$
select CASE WHEN $1 is null and $2 is null THEN '' ELSE
( select CASE WHEN $1 is null THEN $2 ELSE
( select CASE WHEN $2 is null THEN $1 ELSE $1 || $2 END )
END )
END;
-- select $1 || $2 ;
$_$;
Et enfin la fonction d'aggrégation utilisant la fonction précédente :
CREATE AGGREGATE concat(text) (
SFUNC = sconcat,
STYPE = text,
INITCOND = ''
);
Ce qui permet ensuite :
select repertoire.id, concat(zones.pays||',') from repertoire left join zones on (zones.id = any(repertoire.pays_zones_id)) group by 1 ;
id | concat
-----+-------------------------------
195 | France,International,
129 | Hongrie,Roumanie,Tunisie,
3 923 clics - Créé le 16/10/2012 par Tito - Modifié le 25/10/2012