S'abonner au Flux RSS

Mot-clé - backport

Fil des billets - Fil des commentaires

dimanche, octobre 4 2009

Nouvelle architecture pour les backports

Suite aux derniers backports réalisés pour les paquets PL/R et pgbouncer, j'ai désormais à ma disposition une machine avec un processeur amd64 qui me permet de faire des backports en plus de l'architecture i386. J'ai donc sommairement réorganisé le répertoire des paquets.

samedi, octobre 3 2009

Backport lenny de pgbouncer

Nouveau backport d'un outil lié à PostgreSQL, pgbouncer est un gestionnaire de pool de connexion fortement utile sur les systèmes à nombreuses connexions répétitives.

Seule dépendance de pgbouncer, la libevent en version 1.4 qui n'est pas pas non plus packagée dans Lenny, j'en ai donc réalisé également un backport disponible toujours au même endroit. Pour ceux qui ne connaissent pas pgbouncer et souhaiteraient appronfondir le sujet je leur conseille la lecture du hors-série 44 de GNU/Linux magazine dédiée à PostgreSQL.

Première étape, installons la libevent

wget http://rodolphe.quiedeville.org/backports/lenny/i386/libevent-1.4-2_1.4.12-stable-1_i386.deb
dpkg -i libevent-1.4-2_1.4.12-stable-1_i386.deb

Outre libevent pgbouncer à d'autres dépendances qu'il vaut mieux s'assurer d'avoir sur sa machine avant d'installer le paquet.

aptitude install postgresql-common lsb-base libgcc1 libc6

Ceci étant fait il ne nous reste plus qu'à installer le paquet pgbouncer

wget http://rodolphe.quiedeville.org/backports/lenny/i386/pgbouncer_1.3.1-1_i386.deb
dpkg -i pgbouncer_1.3.1-1_i386.deb

Voilà pgbouncer d'installé sur votre distribution stable favorite, il est à noter que par défaut pgbouncer n'est pas lancé, il faut au préalable modifier le fichier /etc/default/pgbouncer comme indiqué par le warning lors de l'installation du paquet.

vendredi, septembre 25 2009

Backport du paquet postgresl-8.3-plr

Partant d'un besoin de calculs statistiques sur des données stockées dans postgresql j'ai été ammené à intégrer le langage R dans notre SI, travaillant avec PostgreSQL sous Debian j'ai cherché le paquet idoine pour me faciliter l'intégration, celui-ci n'existant que dans Squeeze j'ai backporté le paquet postgresql-8.3-plr pour Lenny que je mets à disposition ici. Le paquet original est basé sur le travail Joseph E Conway à l'origine de PL/R

Je profite de ce billet pour décrire l'intégration complète de PL/R dans PostgreSQL.

On y va, première étape récupérer le paquet pour Lenny

wget http://rodolphe.quiedeville.org/backports/lenny/i386/postgresql-8.3-plr_8.3.0.8-1_i386.deb

On procède à l'installation en ayant au préalable installé les dépendances du paquet qui sont r-base-core, postgresql-8.3, et libc6 (>= 2.7-1), toutes satisfaites dans Lenny à ce jour. J'ose imaginer que vous avez déjà postgresql-8.3 et la libc6 d'installée ;-)

heke:/usr/src# dpkg -i postgresql-8.3-plr_8.3.0.8-1_i386.deb
Selecting previously deselected package postgresql-8.3-plr.                             
(Reading database ... 42279 files and directories currently installed.)                 
Unpacking postgresql-8.3-plr (from postgresql-8.3-plr_8.3.0.8-1_i386.deb) ...           
Setting up postgresql-8.3-plr (1:8.3.0.8-1) ...

L'installation du paquet étant fait nous allons maintenant intégrer ce nouveau langage dans notre base et créer une première fonction d'aggrégat pour calculer la médiane. Pour cela nous allons avoir besoin de deux nouvelles fonctions que sont plr_array_accum et median, nous travaillerons en double precision. Vous pouvez télécharger le fichier de commande SQL plr.sql qui crée les fonctions pour tous les types numériques courants.

CREATE FUNCTION plr_array_accum (_float8, float8)
       RETURNS float8[]
       AS '$libdir/plr','plr_array_accum'
       LANGUAGE 'C';

CREATE FUNCTION r_median(_float8)
       RETURNS float
       AS 'median(arg1)'
       LANGUAGE 'plr';

CREATE AGGREGATE median (
       sfunc = plr_array_accum,
       basetype = float8,
       stype = _float8,
       finalfunc = r_median
);

Ceci étant fait nous allons maintenant créer une table avec un jeu de test.

CREATE TABLE foo (
    bar double precision
);   

et le jeu de test

INSERT INTO foo (bar) VALUES (5);
INSERT INTO foo (bar) VALUES (48);
INSERT INTO foo (bar) VALUES (110);
INSERT INTO foo (bar) VALUES (36);

Nous allons maintenant pouvoir calculer la médiane de bar aussi simplement que son maximum ou la somme en utilisant la nouvelle fonction d'agrégat median

test=# SELECT median(bar) from foo ;
 median
--------
     42
(1 row)

Un tel résultat ne peut-être qu'exact, non ?

page 2 de 2 -