Bonjour à tous,
Quelques infos pratiques avant de commencer (je ne sais pas si toutes les infos seront utiles)
OS : Windows 7 (64 bits)
Processeur : Intel Core i7
RAM : 12 Go
Version de PostGreSQL : 9.3 (installé dans D:\Programmes\PostgreSQL\9.3)
Version de R : 3.0.2 (installé dans C:\Program Files\R\R-3.0.2)
Interface d'utilisation de PostGreSQL : pgAdmin III
Forme d'utilisation de PostGreSQL : Utilisation en local uniquement pour du SQL
Niveau en SQL : Novice - J'ai quand même les notions de base
Mon problème
Je dispose d'une base de données de ce type (en plus complet bien entendu ~53 000 lignes) :
Via une requête SQL, pour chaque OBS_ID, je souhaite connaître la valeur médiane du critère ANNEE.
Il semblerait que la solution à mon problème soit toute trouvée en passant par le langage PL/R (comme indiqué sur ce lien).
La première difficulté aura été d'installer l'extension PLR dans PostGreSQL. J'avais pas mal de messages d'erreur liés à des manques dans le répertoire lib de PostGreSQL. J'ai trouvé des indications pour régler tout ça en consultant ces 2 liens :
- www.bostongis.com - Installing PL/R
- georezo.net - Problème chargement langage PLR pour PostGreSQL 9.0
Remarque : Pour que ça fonctionne bien chez moi, il aura fallu que je redémarre le PC après avoir édité les variables d'environnement et placé les bons ddl dans le dossier lib de PostGreSQL.
Donc, une fois le langage PL/R installé dans PostGreSQL et prêt à l'emploi, j'ai testé via l'exemple donné dans le 1er lien indiqué en saisissant les requêtes suivantes :
Jusque là tout va bien. Et lorsque je saisis la requête finale, censée me donner le résultat attendu :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 CREATE OR REPLACE 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 ); CREATE TABLE foo(f0 int, f1 text, f2 float8); INSERT INTO foo values(1,'cat1',1.21); INSERT INTO foo values(2,'cat1',1.24); INSERT INTO foo values(3,'cat1',1.18); INSERT INTO foo values(4,'cat1',1.26); INSERT INTO foo values(5,'cat1',1.15); INSERT INTO foo values(6,'cat2',1.15); INSERT INTO foo values(7,'cat2',1.26); INSERT INTO foo values(8,'cat2',1.32); INSERT INTO foo values(9,'cat2',1.30);
J'ai droit au message d'erreur suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT f1, median(f2) FROM foo GROUP BY f1 ORDER BY f1;
Avec mes maigres compétences et malgré de nombreuses recherches sur le net, je n'ai pas réussi à trouver l'origine de ce problème et la solution pour le régler... Si parmi vous il y en a qui sauraient m'aider, je les remercie par avance.ERREUR: R interpreter expression evaluation error
DETAIL: Error in (PLR32995 <- function(arg1) { : could not find function "median"
CONTEXT: In PL/R function r_median
********** Erreur **********
ERREUR: R interpreter expression evaluation error
État SQL :22000
Détail :Error in (PLR32995 <- function(arg1) { : could not find function "median"
Contexte : In PL/R function r_median
Partager