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 :

exécuter automatiquement un .sql dans base


Sujet :

PostgreSQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 10
    Par défaut exécuter automatiquement un .sql dans base
    Bonjour à tous,

    Je suis actuellement en train de réaliser un projet qui me demande de travailler avec un fichier .sql qui contient des insert de ce genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO questions (`qid`, `sid`, `gid`, `type`, `title`, `question`, `preg`, `help`, `other`, `mandatory`, `lid`) VALUES ('11', '2', '6', 'L', 'Q-02', 'A quel corps appartenez-vous ?', '', '', 'N', 'Y', '0');
    INSERT INTO questions (`qid`, `sid`, `gid`, `type`, `title`, `question`, `preg`, `help`, `other`, `mandatory`, `lid`) VALUES ('12', '2', '6', 'L', 'Q-03', 'Votre catégorie ?', '', '', 'N', 'Y', '0');
    INSERT INTO questions (`qid`, `sid`, `gid`, `type`, `title`, `question`, `preg`, 'help`, `other`, `mandatory`, `lid`) VALUES ('13', '2', '6', 'S', 'Q-04', 'Votre service ?', '', '', 'N', 'N', '0');
    ...et je voulais savoir s'il y avait un moyen pour qu'automatiquement ce fichier .sql s'ajoute à ma base de données déjà crée dans postgres pour s’exécuter (là aussi automatiquement) et ainsi mettre à jour ma table "questions" ici par exemple...?

    Merci d'avance!

  2. #2
    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
    D'après la syntaxe de l'INSERT, ces commandes sont destinées à une base MySQL et non PostgreSQL, non?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 10
    Par défaut
    Oui oui c'est bien sous la forme MySQL...C'est bien ça le problème non?

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    bah, c'est plus un problème lié à votre OS qu'a postgresql.

    Vous allez devoir reformater la syntaxe MySql pour que pg la comprenne (avec un programme externe), puis vous pourrez l'executer (avec pgsql).

    tout ceci à lancer dans un script.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 10
    Par défaut
    Je pensais créer un petit script (en bash par exemple) qui reformaterait justement le fichier pour le mettre sous la syntaxe PostgreSQL...
    Est-ce envisageable? Et surtout qu'aurais-je à supprimer/modifier de la syntaxe MySQL pour l'adapter à PostgreSQL? (seulement les ' il me semble non?)

    Puis je voulais créer un autre script (en php celui ci par contre) pour récupérer le fichier .sql sous la bonne syntaxe et faire exécuter les requêtes qui sont à l’intérieur.
    Est-ce envisageable là aussi? Avec quelle(s) fonction(s)?

    Merci encore!

  6. #6
    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
    Oui il faut enlever les quotes inversées autour des noms de colonnes.

    Sinon pour exécuter le fichier résultant, il y a déjà un interpréteur de commandes, un programme qui s'appelle psql, qui peut se connecter à la base de données, et permet de "jouer" le fichier SQL.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 10
    Par défaut
    Ok merci! Par contre ma requête ne s’exécute pas même quand je supprime les quotes inversées, j'ai cette erreur : "unexpected T_LNUMBER in C:\wamp\www\test\test.php on line 7".
    Ma ligne 7 est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $bdd->exec('INSERT INTO groups (gid, sid, group_name, description) VALUES ('8', '2', 'blabla', 'commentairesok')');
    Je comprends pas ce qui cloche

    Sinon oui j'étais au courant pour pgsql mais je cherchais à automatiser cette tache dans le sens ou l'utilisateur n'aura pas à taper une ligne de code sous pgsql. Il aura seulement à double cliquer pour exécuter le script PHP qui s'occupera de tout faire...

  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
    Le problème est que les apostrophes sont utilisées à la fois comme délimiteur de chaine et à l'intérieur de la chaine.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 10
    Par défaut
    J'ai des erreurs dans mon script pour justement enlever ses quotes inversées et exécuter les requetes:

    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
    22
    <?php
    try
    {
        $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
        $bdd = new PDO('pgsql:host=localhost;dbname=BRL', 'postgres', 'mdp', $pdo_options);
     
     
     
    	$filename = "insert_script.sql"; // fichier texte
    	$requetes = str_replace( "`", "", $requetes);
    	foreach($requetes as $query){ // on le lit
    		pg_exec($query);
    		echo "OK.<br>";
    	}
     
     
    }
    catch(Exception $e)
    {
        die('Erreur : '.$e->getMessage());
    }
    ?>
    "Undefined variable: requetes" et "Invalid argument supplied for foreach()" comme erreurs, une idée d’où cela pourrait venir?

  10. #10
    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
    Déjà il faudrait que le code ouvre le fichier pour pouvoir le lire. Mettre le nom du fichier dans une variable ça ne va pas suffire.

    Si tu ne maitrises pas les bases de la programmation, ne le fais pas avec un programme mais simplement avec des commandes.

    En shell il suffirait de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ tr -d '`' < fichier.sql | psql [options]

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 10
    Par défaut
    Le soucis c'est que j'aimerais automatiser cette tache et que je suis sous windows...

  12. #12
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    Bein là va falloir prendre sur soit, et passer du temps pour debugger votre programme.

    Ce message ne vous aidera pas mais si vous avez à faire ce genre tache souvent c'est le moment de s'y coller réellement

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 10
    Par défaut
    J'y ai passé du temps mais la je ne comprends vraiment plus d’où mon erreur peut venir. J'en suis arrivé ici:

    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
    <?php
     
        $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
        $bdd = new PDO('pgsql:host=localhost;dbname=BRL', 'user', 'mdp', $pdo_options);
     
     
     
    	$filename = "insert_script.sql"; // fichier texte
    	$file = fopen($filename, "r");
    	$sql = fread($file, filesize($filename));
    	fclose($file);
    	$requetes= $sql;
    	$array_requetes = str_replace( "`", "", $requetes);
    	$array_requetes = explode(";\n",$requetes);
    	foreach($array_requetes as $query){
    		pg_query($bdd,$query);
    		echo "OK.<br>";
    	}
     
    ?>
    C'est au niveau de pg_query que ça plante ("pg_query() expects parameter 1 to be resource"), une idée pour m'aider?

    Merci!

  14. #14
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    j'y connais rien en php, mais je suppose que vous utilisez mal PDO ou alors ce n'est pas PDO qu'il faut utiliser pour se connecter à postgresql.

    http://www.php.net/manual/fr/ref.pdo...connection.php ?
    http://www.php.net/manual/fr/function.pg-connect.php ?

    Et il doit y avoir d'autres choses.
    Bonne recherche.

Discussions similaires

  1. [PHP 5.0] Exécuter une requête SQL dans une fonction Javascript
    Par PrinceMaster77 dans le forum Langage
    Réponses: 13
    Dernier message: 08/07/2011, 04h53
  2. [AC-2003] Exécuter une Requête SQL dans VBA
    Par domik dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 24/08/2010, 13h22
  3. est il possible d'exécuter un fichier .sql dans action script ?
    Par wannabi dans le forum ActionScript 3
    Réponses: 2
    Dernier message: 01/09/2008, 15h16
  4. Exécuter un fichier SQL dans Access
    Par FredFrance21 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 11/01/2008, 13h37
  5. Réponses: 5
    Dernier message: 16/03/2006, 00h37

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