PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 26/11/2014 16:14:23

Skullmachine
Membre

[Résolu] Importation de fichiers CSV depuis machines Windows

Bonjour,

Je viens vers vous car je cherche une solution répondant au problème qui suit.

J'ai une BDD PostgreSQL 9.3 contenant une table me permettant de faire la traçabilité de pièces. Cette table doit être mise à jour par des fichiers .csv distant. Le soucis est que pour récupérer ces données, je dois me connecter à des ordinateurs sous Windows XP et Seven qui ont un login et un mot de passe de session chacun différent.

Ma requête actuelle non fonctionnelle est là suivante :

COPY "nom_de_la_table" FROM '\\adresse_ip\fichier.csv' DELIMITER ';' CSV HEADER ;

Lorsque je l'exécute, l'erreur suivante me parvient:

ERREUR:  n'a pas pu ouvrir le fichier « \\adresse_ip\fichier.csv » pour une lecture : Invalid argument

********** Erreur **********

ERREUR: n'a pas pu ouvrir le fichier « \\adresse_ip\fichier.csv » pour une lecture : Invalid argument
État SQL :XX000

Pourriez vous me dire s'il existe une solution me permettant de me loguer sur chaque ordinateur en intégrant le login et le mot de passe dans la requête SQL?

Merci d'avance pour votre réponse,

Skullmachine

Dernière modification par Skullmachine (09/12/2014 13:55:12)

Hors ligne

#2 26/11/2014 23:42:16

gleu
Administrateur

Re : [Résolu] Importation de fichiers CSV depuis machines Windows

La commande COPY ne le permet pas. La seule solution que je vois est d'écrire un outil qui ferait la connexion et lancerait le COPY.


Guillaume.

Hors ligne

#3 27/11/2014 09:22:05

damalaan
Membre

Re : [Résolu] Importation de fichiers CSV depuis machines Windows

Bonjour

Si vous êtes sous Windows, pourquoi pas un script en PowerShell du style :

#connexion au réseau
$login= "toto"
$mdp= "titi"
$obj = New-Object -com Wscript.Network 
$obj.MapNetworkDrive("K:","\\192.168.1.10\mondossier", "False", $login, $mdp)

#lancement de la commande PG

 & "C:\Program Files\PostgreSQL\9.3\bin\psql.exe" -h localhost -p 5432 -d mabase-U monuser-c "select mafonction();"

Hors ligne

#4 27/11/2014 10:04:35

Skullmachine
Membre

Re : [Résolu] Importation de fichiers CSV depuis machines Windows

Bonjour,

Merci pour vos réponse rapide.
Est ce que du coup mafonction() est une fonction SQL qui lancerait mon COPY?

Merci smile

Hors ligne

#5 27/11/2014 10:44:42

damalaan
Membre

Re : [Résolu] Importation de fichiers CSV depuis machines Windows

oui c'est une fonction créée de manière tout à fait classique en SQL ou PL/pgSQL avec CREATE OR REPLACE FUNCTION mafonction().......

et qu'on appelle ensuite avec un select mafonction()

Attention aux antislashes (\), il me semble que PG considère ça comme un caractère d'échappement, ils ne sont donc pas admis pour les chemins des fichiers (ne pas oublier que Postgres vient du monde UNIX); il faut donc noter un truc du genre C:/temp/moncsv.csv

Hors ligne

#6 27/11/2014 12:53:26

Skullmachine
Membre

Re : [Résolu] Importation de fichiers CSV depuis machines Windows

Après la création du script PowerShell:

#connexion au réseau
$login= "login"
$mdp= "mdp"
$obj = New-Object -com Wscript.Network
$obj.MapNetworkDrive("K:","\\adress_ip\dossier", "False", $login, $mdp)
#lancement de la commande PG
& "C:\Program Files\PostgreSQL\9.3\bin\psql.exe" -h localhost -p 5432 -d postgres -U postgres -c "select dataimport();"

Puis la création de la fonction sur pgAdmin III:

CREATE OR REPLACE FUNCTION dataimport()
  RETURNS void AS
$BODY$COPY "tracabiliteImport" FROM 'K:/fichier.csv' DELIMITER ';' CSV; -- Ici j'ai un slash au lieu d'un anti slash

$BODY$
  LANGUAGE sql VOLATILE
  COST 100;
ALTER FUNCTION dataimport()
  OWNER TO postgres;

Lorsque que le script PowerShell est lancé, le connecteur réseau est bien créé (K:). L'authentification à la base s'est faite correctement. Cependant, l'erreur suivante survient:

ERREUR: n'a pas pu ouvrir le fichier K:\fichier.csv pour une lecture : No such file or directory

C'est incompréhensible car mon fichier se trouve à la bonne arborescence. (\\adress_ip\dossier\fichier.csv)

Dernière modification par Skullmachine (27/11/2014 12:54:48)

Hors ligne

#7 27/11/2014 13:05:44

damalaan
Membre

Re : [Résolu] Importation de fichiers CSV depuis machines Windows

Ah petite subtilité (logique) que j'avais oublié : le serveur va traiter un fichier qui est sur.....le serveur!!

il faudrait modifier le script powershell, copier votre fichier dans un repertoire, le traiter, (le supprimer)

#copie en PS
$dossier = 'C:\temp'
Copy-Item -Path "Q:\moncsv.csv"  -Destination $dossier

Hors ligne

Pied de page des forums