Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 26/02/2015 12:34:05
- Pasquali.Philippe
- Membre
Commande "COPY FROM PROGRAM"
Bonjour,
Postgresql version 9.03.04 64 bits pour Windows
J'essaye d'utiliser cette fonction (http://www.postgresonline.com/article_p … y/345.html) qui exécute un programme (ogr_fdw_info.exe) dont le résultat est stocké dans la table ogr_fdw_out.
CREATE OR REPLACE FUNCTION ogr_fdw_sql_table(
data_source text,
layer text DEFAULT ''::text)
RETURNS text AS
$$
BEGIN
DROP TABLE IF EXISTS ogr_fdw_out;
CREATE TEMP TABLE ogr_fdw_out(out text);
IF layer > '' THEN
EXECUTE 'COPY ogr_fdw_out FROM PROGRAM ''"D:/Program Files/PostgreSQL/9.3/bin/ogr_fdw_info" -s "' || data_source || '" -l "' || layer || '"''';
ELSE
EXECUTE 'COPY ogr_fdw_out FROM PROGRAM ''"C:/Program Files/PostgreSQL/9.4/bin/ogr_fdw_info" -s "' || data_source || '"'' ';
END IF;
/** postgresql converts each output to a row, but we want as a single string back **/
RETURN (SELECT string_agg(out,E'\n') from ogr_fdw_out);
END;
$$
LANGUAGE plpgsql VOLATILE SECURITY DEFINER;
- Si j'exécute tel quel ce code avec comme paramètre : D:\temp\ogr\test_xls97_20003.xls et j'ai le message d'erreur :
ERREUR: le programme « "D:/Program Files/PostgreSQL/9.3/bin/ogr_fdw_info" -s "D:\temp\ogr\test_xls97_20003.xls" » a échoué
DETAIL: le processus fils a quitté avec le code de sortie 1
CONTEXT: instruction SQL « COPY ogr_fdw_out FROM PROGRAM '"D:/Program Files/PostgreSQL/9.3/bin/ogr_fdw_info" -s "D:\temp\ogr\test_xls97_20003.xls"' »
fonction PL/pgsql ogr_fdw_sql_table(text,text), ligne 9 à instruction EXECUTE
Je supprime les doubles quottes entourant le paramètre data_source
EXECUTE 'COPY ogr_fdw_out FROM PROGRAM ''"C:/Program Files/PostgreSQL/9.4/bin/ogr_fdw_info" -s ' || data_source || ''' ';
- Si j'exécute avec le paramètre : D:\temp\ogr\test_xls97_20003.xls j'ai le résultat dans ma table
- Si j'exécute avec le paramètre : C:\Temp\test ogr\test_xls97_20003.xls je n'ai pas d'erreur mais pas de résultat dans ma table mais c'est normal vu que le chemin comporte un espace, donc je suppose qu'il ne trouve pas le fichier.
- Vérification directe avec les requêtes :
COPY ogr_fdw_out FROM PROGRAM '"D:/Program Files/PostgreSQL/9.3/bin/ogr_fdw_info.exe" -s d:\temp\ogr\test_xls97_20003.xls'
Fonctionne et j'ai le bon résultat dans la table ogr_fdw_out
COPY ogr_fdw_out FROM PROGRAM '"D:/Program Files/PostgreSQL/9.3/bin/ogr_fdw_info.exe" -s c:\temp\test ogr\test_xls97_20003.xls'
Pas d'erreur mais pas de résultat vu qu'il ne trouve pas le fichier
COPY ogr_fdw_out FROM PROGRAM '"D:/Program Files/PostgreSQL/9.3/bin/ogr_fdw_info.exe" -s "c:\temp\test ogr\test_xls97_20003.xls"'
ERREUR: le programme « "D:/Program Files/PostgreSQL/9.3/bin/ogr_fdw_info.exe" -s "c:\temp\test ogr\test_xls97_20003.xls" » a échoué
DETAIL: le processus fils a quitté avec le code de sortie 1
- Vérification dans une fenêtre MsDos :
"C:\Users\admin>d:\Program Files\PostgreSQL\9.3\bin\ogr_fdw_info.exe" -s d:\Temp\ogr\test_xls97_20003.xls : fonctionne et j'ai le bon affichage
"C:\Users\admin>d:\Program Files\PostgreSQL\9.3\bin\ogr_fdw_info.exe" -s c:\temp\test ogr\test_xls97_20003.xls : ERROR 1: Could not conect to source 'c:\temp\test'
"C:\Users\admin>d:\Program Files\PostgreSQL\9.3\bin\ogr_fdw_info.exe" -s "c:\temp\test ogr\test_xls97_20003.xls" : fonctionne et j'ai le bon affichage
Je n'arrive pas à comprendre ce qui génère l'erreur...
Hors ligne
#2 26/02/2015 14:39:12
- ruizsebastien
- Membre
Re : Commande "COPY FROM PROGRAM"
bonjour,
C'est à cause de l'espace dans le chemin que vous indiquez (...\test ogr\....) :
"C:\Users\admin>d:\Program Files\PostgreSQL\9.3\bin\ogr_fdw_info.exe" -s c:\temp\test ogr\test_xls97_20003.xls : ERROR 1: Could not conect to source 'c:\temp\test'
en mettant les doubles cotes vous forcez l'interpréteur à prendre le chemin complet.
Sans les doubles cotes l'interpréteur s'arrête à c:\temp\test
Cordialement,
Cordialement,
Sébastien.
Hors ligne
Pages : 1