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

PostgreSQL Discussion :

Trigger après import via \copy


Sujet :

PostgreSQL

  1. #1
    Membre éclairé Avatar de _Carole
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 105
    Par défaut Trigger après import via \copy
    Bonjour,

    Dans le cadre du développement d'une application de gestion de projet (qui s'effectue pour le moment via différent fichier Excel) j'aimerais remplir ma base de données à partir de ces différents fichiers.

    J'ai donc utilisé la fonction \copy pour remplir mes tables et j'ai ensuite fait plusieurs requêtes afin de mettre en forme mes données (remplacer le nom des services concernés par leurs identifiants par exemple).

    Je dois ensuite permettre à l'utilisateur d'importer lui même des fichiers csv via l'application (un petit formulaire avec un champ "file" donc...) en vue d'ajouter des projets, de mettre à jour d'autre...

    Seulement voilà, je suis perdue... Je n'ai aucune idée de la marche à suivre.

    L'import csv depuis mon application php pourra-t-il se faire avec la fonction \copy ?
    Si oui, est-il possible de déclencher des triggers après cette fonction ou dois-je mettre mes requêtes dans l'application ?

    Je trouve beaucoup de code en vrac mais j'ai pas vraiment de cheminement d'idées, rien de bien clair sur l'ordre à faire les choses etc...

    Pour informations : J'utilise PostGre 9.1.2 et PGAdmin III version 1.16.1.

    En vous remerciant d'avance !

  2. #2
    Membre Expert
    Avatar de alassanediakite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Billets dans le blog
    8
    Par défaut
    Salut
    Vous utilisez COPY dépuis PgAdmin ou \copy dépuis psql?
    @+

  3. #3
    Membre éclairé Avatar de _Carole
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 105
    Par défaut
    J'utilise la fonction
    \copy ma_table from 'mon_fichier.csv';

    Depuis psql. L'utiliser comme ça, je pense pas que cela sera possible avec du php...

  4. #4
    Membre Expert
    Avatar de alassanediakite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Billets dans le blog
    8
    Par défaut
    Salut
    S'il est possible de lancer un exécutable depuis php, je ne voie pas de problème.
    Je trouve qu'il est plus simple de créer une procédure qui reçoit le fichier et exécute COPY. La doc de PostgreSQL dit que COPY exécute tous les déclencheurs et vérifie toutes les contraintes.
    Si vous maitrisé encore mieux php, vous pouvez extraire les données de EXCEL puis les insérer avec les modif nécessaires dans PostgreSQL.
    @+

  5. #5
    Membre éclairé Avatar de _Carole
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 105
    Par défaut
    Donc pour bien faire, à la validation de mon formulaire php, j’exécute une requête COPY et c'est tout ?
    Le trigger dans PGAdmin sera lancé automatiquement ?

    Merci de la rapidité de la réponse.

  6. #6
    Membre Expert
    Avatar de alassanediakite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par _Carole Voir le message
    ...
    Le trigger dans PGAdmin sera lancé automatiquement ?
    Dans PostgreSQL pas dans pgadmin!!!
    @+

  7. #7
    Membre éclairé Avatar de _Carole
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 105
    Par défaut
    OK! je découvre les deux depuis deux/trois semaines et j'avoue avoir du mal à faire la différence entre la base de données et l'outil pour y accéder.

    Merci pour l'éclaircissement.

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Par défaut
    Si le fichier n'est pas sur la même machine que le serveur postgresql, le COPY FROM '/chemin/du/fichier' n'est pas utilisable car le serveur n'a pas accès au système de fichier du client.

    Ce que fait le \copy de psql, c'est de lancer la COPY FROM STDIN puis envoi du contenu du fichier sur la connexion.

    On peut faire un peu la même chose en PHP, en utilisant:

    - soit pg_copy_from: http://www.php.net/manual/en/function.pg-copy-from.php
    si on a au préalable chargé les données dans un tableau, une ligne par élément de tableau.
    Malheureusement cette fonction ne gère pas directement le CSV dans le tableau en question mais on peut combiner avec d'autres fonctions php dédiées au CSV.

    - soit pg_put_line : http://www.php.net/manual/en/function.pg-put-line.php
    Avec cette version le CSV doit pouvoir être envoyé sans décodage.

Discussions similaires

  1. Importation des nombres décimaux à virgule via COPY
    Par marcandre dans le forum Requêtes
    Réponses: 4
    Dernier message: 21/07/2014, 14h12
  2. Problème champ après import d'excel vers access
    Par David M dans le forum Access
    Réponses: 6
    Dernier message: 16/10/2005, 11h53
  3. quel format doit avoir une BD pour l'importer avec copy?
    Par daknoom dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 03/02/2005, 19h41
  4. Réponses: 5
    Dernier message: 16/12/2004, 22h31
  5. blocage base après importation d'un module
    Par voodoo dans le forum Access
    Réponses: 3
    Dernier message: 13/10/2004, 15h15

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