mardi 8 décembre 2009
Les bases de données PostgreSQL ont l'avantage de pouvoir travailler facilement avec les arrays (tableaux). Depuis la version 8.4, une nouvelle fonction a fait son apparition : unnest().
L'utilité de unnest est de prendre le contenu d'un array et de le transformer en table à plusieurs enregistrements. Par exemple :
SELECT unnest(ARRAY['Montréal', 'Québec', 'Saint-Elie-de-Caxton']) as villeRetournera l'array sous forme de table
ville (text)
----------------
Montréal
Québec
Saint-Elie-de-Caxton
Avec un client, nous avions la contrainte de devoir travailler avec une version plus vieille. Pour installer une de nos applications, nous avons dû transformer notre code pour que ça soit compatible avec leur système et comme ils utilisaient une version de Postgres 8.3, unnest n'était pas disponible.
Pour créer une version qui simule le comportement de la fonction unnest de 8.4, on peut en définir une comme ceci :
CREATE OR REPLACE FUNCTION unnest(anyarray)Aussi, ça peut être une idée d'utiliser un nom différent afin d'éviter un conflit avec la fonction native si on fait met à jour Postgres pour une version plus récente.
RETURNS SETOF anyelement AS
$BODY$
SELECT $1[i]
FROM generate_series(array_lower($1,1), array_upper($1,1)) i;
$BODY$
LANGUAGE 'sql' IMMUTABLE