Dernièrement, j’ai eu l’occasion de travailler sur PostgreSQL (J’ai plus l’habitude de travailler sur MySQL).
Dans un de mes développements, je devais utiliser une fonction permettant le regroupement de différentes valeurs en une chaîne de caractère.
J’avais déjà utilisé group_concat dans MySQL, et je n’avais utiliser l’équivalent dans PostgreSQL.
Avec un peu de recherche, j’ai vu qu’il était possible de créer des fonctions spécifiques, et de les ajouter dans PostgreSQL. C’est ce que j’ai fait.
Pour cela, c’est très simple : il faut d’abord aller sur votre outil qui gère vos BDD (pgAdmin, …).
Puis, il faut ajouter les lignes suivantes :
create aggregate array_accum (
sfunc = array_append,
basetype = anyelement,
stype = anyarray,
initcond = '{}'
);
CREATE OR REPLACE FUNCTION _group_concat(text, text)
RETURNS text AS $$
SELECT CASE
WHEN $2 IS NULL THEN $1
WHEN $1 IS NULL THEN $2
ELSE $1 operator(pg_catalog.||) ',' operator(pg_catalog.||) $2
END
$$ IMMUTABLE LANGUAGE SQL;
CREATE AGGREGATE group_concat (
BASETYPE = text,
SFUNC = _group_concat,
STYPE = text
);
A partir de maintenant, la fonction group_concat est utilisable dans PostgreSQL