IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration PostgreSQL Discussion :

Scanner dossiers d'un serveur sous Windows [9.3]


Sujet :

Administration PostgreSQL

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 132
    Points
    132
    Par défaut Scanner dossiers d'un serveur sous Windows
    Bonjour à vous,

    Je tente de mettre en place un système de scan de dossiers / fichiers d'un dossier de serveur, et d'importer le résultat de ce scan dans une base de données PG.
    Pour le scan, j'ai créé un BAT qui fonctionne bien.
    Maintenant, plutôt que de stocker le résultat dans un TXT, j'aimerais que ça alimente directement une base PG.
    Pensez-vous que ce soit possible ?

    J'ai vu qu'il existait la fonction "COPY TO/FROM PROGRAM" (http://paquier.xyz/postgresql-2/post...ofrom-program/), peut-être est-ce une piste ?

    Et sinon, quand je tente d'importer mes fichiers TXT en local sur le serveur PostGreSQL (en localhost), via un "COPY" tout simple, j'obtiens le message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ERREUR: n'a pas pu ouvrir le fichier « C:/chemin/liste.txt » pour une lecture : Permission denied
    Merci à vous pour vos conseils !

    Sylvain M.

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Bonjour,

    Pour que COPY puisse lire un fichier sur le serveur, il faut que l'utilisateur "postgres" ait les droits de lecture sur le fichier en question (et le répertoire où il se situe).
    À noter également qu'il faut être superutilisateur pour pouvoir exécuter la commande COPY.

    En revanche, depuis un client psql, vous pouvez, depuis une machine cliente, faire la même chose sur un fichier présent sur le poste client avec la métacommande \copy de psql. Dans ce cas, pas besoin d'être superutilisateur, et pour les droits, il faut que l'utilisateur qui lance la commande ait les droits de lecture sur le fichier à charger.
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 132
    Points
    132
    Par défaut
    Merci ced pour ta réponse et désolé pour le délai ! (j'étais sur d'autres sujets)

    Effectivement, j'avais bien identifié que PSQL permettrait de contourner ce problème de droits.
    Malheureusement, je ne connais pas encore très bien PSQL, et je n'ai pas trop compris si la "métacommande \COPY" de PSQL fonctionne à l'identique de la commande SQL COPY ?

    Voici la requête que je fais sur PgAdmin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    COPY schema.liste (	dossier,
    				fichier,
    				date_creation,
    				date_acces)
        FROM E'c:\monfichier.txt'
        WITH 
              DELIMITER AS '|'
              ENCODING 'WIN1252';
    Comment écrire cette requête sous PSQL ?

    Merci à vous !

  4. #4
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    La différence, avec \copy, c'est que la commande doit être écrite sur une seule ligne.
    Donc, avec votre exemple, ça doit donner quelque chose comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    \copy schema.liste (dossier, fichier, date_creation, date_acces) FROM 'c:\monfichier.txt' WITH DELIMITER AS '|' ENCODING 'WIN1252'
    À noter que le chemin vers le fichier à charger est un chemin sur la machine locale, pas sur le serveur.

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 132
    Points
    132
    Par défaut
    Salut ced, salut à tous,
    Merci encore pour ton aide !
    Bon, j'y suis presque, mais je n'y parviens pas encore...

    Je ne maitrise pas encore l'environnement psql dans Windows, mais voici où j'en suis :
    Je fais d'abord ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    psql -U postgres -d mabase
    et j'arrive là :
    Ensuite je lance ma commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    \COPY schema.liste (dossier, fichier, date_creation, date_acces, date_ecriture) FROM 'C:/chemin/monfichier.txt' WITH DELIMITER AS '|' null ''
    Mais j'obtiens systématiquement un message d'erreur...
    Soit :
    Citation Envoyé par psql
    ERREUR: séquence d'octets invalide pour l'encodage « UTF8 » : 0x80
    (mon fichier texte est pourtant encodé en UTF-8 sans BOM)
    Soit :
    Citation Envoyé par psql
    ERREUR: données manquantes pour la colonne « date_ecriture »
    Voici les premières lignes de mon fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    C:\SIG\3_PNRNM\CARTOTHEQUE\|ancienne CARTOTHEQUE sur Y.lnk|16/12/2014|15/07/2015|16/01/2018 
    C:\SIG\3_PNRNM\CARTOTHEQUE\Administratif\|Plan de Parc - OpenStreetMap Watercolor.jpg|05/05/2017|05/05/2017|05/05/2017 
    C:\SIG\3_PNRNM\CARTOTHEQUE\Administratif\|Plan de Parc - OpenStreetMap Watercolor.qgs|05/05/2017|05/05/2017|05/05/2017
    Sauriez-vous identifier ce qui pose problème dans mon txt ?
    (je peux l'envoyer en MP si besoin)

    Merci !

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 132
    Points
    132
    Par défaut
    Bon, je viens d'identifier que c'est le caractère antislash ("\") qui pose problème...
    Je vais voir comment gérer ça...

    [Edit]
    C'est bon !!!
    En ajoutant le format CSV dans la commande, les antislash ne sont plus interprétés comme des échappements !!!

    Ça marche !!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Monitoring d'un serveur sous Windows avec PHP
    Par KeBoss dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 11/02/2009, 16h46
  2. terminal serveur sous windows 2003
    Par ulysse031 dans le forum Windows Serveur
    Réponses: 8
    Dernier message: 24/05/2008, 15h11
  3. Mode Client-Serveur sous Windows XP ?
    Par habilité dans le forum Tcl/Tk
    Réponses: 2
    Dernier message: 21/04/2008, 21h36
  4. Installer un serveur sous Windows ou Linux
    Par dell.inferno dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 13/01/2007, 19h42
  5. Réponses: 21
    Dernier message: 07/05/2006, 17h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo