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

Shell et commandes GNU Discussion :

Lancer une commande SQL (postgreSQL) dans un shell


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2011
    Messages
    371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 371
    Par défaut Lancer une commande SQL (postgreSQL) dans un shell
    Bonjour,

    j'ai besoin de faire ceci:

    1: Demader l'utilisateur et le mot de passe pour postgresql.
    2: Demander ou se trouve le fichier csv
    2: Me connecter à postgreSQL pour lancer ma commande.
    3: lancer mon insert into en passant 2 variables venant du fichie CVS (code_tiers_csv, libelle_groupe_csv) et pour toutes les lignes.

    voici ma commande SQL à lancer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    INSERT into rasso_grp_tiers (id_groupe, numbenef, idg_regie)
    SELECT group_tiers.id, tiers.numbenef, tiers.idg_regie 
    FROM rhabitue AS tiers, rgroupe_tiers AS group_tiers 
    WHERE tiers.numbenef IN (SELECT numbenef FROM rhabitue WHERE code_tiers = $code_tiers_csv) 
    AND tiers.idg_regie IN (SELECT idg_regie FROM rhabitue WHERE code_tiers = $code_tiers_csv) 
    AND group_tiers.id IN (SELECT id FROM rgroupe_tiers WHERE libelle = $libelle_groupe_csv AND idg_regie IN (SELECT idg_regie FROM rhabitue WHERE code_tiers = $code_tiers_csv));
    Comment faire?
    Merci pour votre aide.

  2. #2
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 288
    Par défaut
    Bonjour,

    Le mot clé qu'il te manque est .

    Tu parles de shell, auquel cas "psql" te suffit pour passer en mode interactif dans une console.

    Mais j'ai l'impression que tu cherches à faire plus qu'utiliser un shell: un script. Dans ce cas, tu écriras un fichier du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #!/bin/bash
     
    psql -U postgres -d database_name -c "INSERT into rasso_grp_tiers (id_groupe, numbenef, idg_regie)
    SELECT group_tiers.id, tiers.numbenef, tiers.idg_regie 
    FROM rhabitue AS tiers, rgroupe_tiers AS group_tiers 
    WHERE tiers.numbenef IN (SELECT numbenef FROM rhabitue WHERE code_tiers = $code_tiers_csv) 
    AND tiers.idg_regie IN (SELECT idg_regie FROM rhabitue WHERE code_tiers = $code_tiers_csv) 
    AND group_tiers.id IN (SELECT id FROM rgroupe_tiers WHERE libelle = $libelle_groupe_csv AND idg_regie IN (SELECT idg_regie FROM rhabitue WHERE code_tiers = $code_tiers_csv));"

  3. #3
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    j'ajouteai qu'il existe une variable d'env qui permet d'éviter les problèmatiques de passwords avec postgresql... PG_PASSWORD je crois....

  4. #4
    Membre éclairé

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2011
    Messages
    371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 371
    Par défaut
    Bonjour,
    J'avance et tout fonctionne sauf la demande de mot de passe. Quelqu'un a-t-il une idée?

    Pur le moment j'ai ca:
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    ##!/bin/sh
     
    echo -n "Entrez le nom d'utilisateur PostgreSQL "
    read UserPG
    echo -n "Mot de passe : "
    read PG_PASSWORD
    csv_DirectoryLocation=$(pwd)
    echo -n "Le fichier CSV se trouve-t-il dans le répertoire suivant? \n $csv_DirectoryLocation : [Oui] ou [Non]"
    read answer
    case $answer in
    	Oui|OUI|oui|O|o ) csv_location=$csv_DirectoryLocation/asso_tiers_groupe.csv
    		echo "Le fichier se trouve dans: $csv_location";;
    	Non|NON|non|N|n ) echo -n "Dans quel répertoire se trouve le fichier asso_tiers_regie.csv?"
    		read csv_EntryLocation
    		csv_location=$csv_EntryLocation/asso_tiers_groupe.csv
    		echo "Le fichier se trouve donc bien dans: $csv_location";;
    	*) "Au revoir...";;
    esac
     
    for ligne in `cat $csv_location`
    do
        echo $ligne
        code_tiers_csv=`echo $ligne | awk -F";" '{ print $1 }'`
        echo "code_tiers_csv = $code_tiers_csv"
        libelle_groupe_csv=`echo $ligne | awk -F";" '{ print $2 }'`
        echo "libelle_groupe_csv = $libelle_groupe_csv"
     
    psql lorrainng_db -U $UserPG << EOF
     
    INSERT into lorrainng_role.rasso_grp_tiers (id_groupe, numbenef, idg_regie)
     
    SELECT group_tiers.id, tiers.numbenef, tiers.idg_regie 
    FROM lorrainng_role.rhabitue AS tiers, lorrainng_role.rgroupe_tiers AS group_tiers 
    WHERE tiers.numbenef IN (SELECT numbenef FROM lorrainng_role.rhabitue WHERE code_tiers = '$code_tiers_csv') 
    AND tiers.idg_regie IN (SELECT idg_regie FROM lorrainng_role.rhabitue WHERE code_tiers = '$code_tiers_csv')
    AND group_tiers.id IN (SELECT id FROM lorrainng_role.rgroupe_tiers WHERE libelle = '$libelle_groupe_csv' AND idg_regie IN (SELECT idg_regie FROM lorrainng_role.rhabitue WHERE code_tiers = '$code_tiers_csv'));
    EOF
     
    done
     
    PG_PASSWORD=""

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par vandman Voir le message
    Bonjour,
    J'avance et tout fonctionne sauf la demande de mot de passe. Quelqu'un a-t-il une idée?

    Pur le moment j'ai ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ##!/bin/sh
     
    echo -n "Entrez le nom d'utilisateur PostgreSQL "
    read UserPG
    echo -n "Mot de passe : "
    read PG_PASSWORD
    Salut

    Déjà c'est PGPASSWORD et non PG_PASSWORD, et en plus cette variable doit-être exportée pour que les processus fils (dont psql) puissent y accéder. Et tant qu'à faire t'as aussi PGUSER plus adéquat que UserPG...

    Citation Envoyé par vandman Voir le message
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    case $answer in
    	Oui|OUI|oui|O|o )
    		csv_location=$csv_DirectoryLocation/asso_tiers_groupe.csv
    		echo "Le fichier se trouve dans: $csv_location";;
    	Non|NON|non|N|n )
    		echo -n "Dans quel répertoire se trouve le fichier asso_tiers_regie.csv?"
    		read csv_EntryLocation
    		csv_location=$csv_EntryLocation/asso_tiers_groupe.csv
    		echo "Le fichier se trouve dans: $csv_location";;
    	*) "Au revoir...";;
    esac
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    case $answer in
    	O|o|[oO][uU][iI] )
    		csv_location=$csv_DirectoryLocation/asso_tiers_groupe.csv;;
    	N|n|[nN][oO][nN] )
    		echo -n "Dans quel répertoire se trouve le fichier asso_tiers_regie.csv?"
    		read csv_EntryLocation
    		csv_location=$csv_EntryLocation/asso_tiers_groupe.csv;;
    	*)
    		echo "Au revoir..."
    		exit
    esac
    echo "Le fichier se trouve dans: $csv_location"

    Citation Envoyé par vandman Voir le message
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for ligne in `cat $csv_location`
    do
    ...
    done
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    cat $csv_location |while read ligne
    do
    ...
    done

    Citation Envoyé par vandman Voir le message
    Inutile vu qu'en fin de code le processus disparait ainsi que toutes ses variables. Mais si vraiment tu veux le faire alors passe par unset qui est fait pour ça
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    genres PG_PASSWORD="dfsdfsdfsdfs" dans l'environnement de l'utilisateur qui lance le script


    Pas dans le script..

    par exemple dans /home/tonuser/.profile ou /home/tonuser/.bshrc

    ne pas faire de read password

Discussions similaires

  1. [XL-2010] Intégrer une commande SQL (complexe) dans une macro
    Par urbandot dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 14/11/2011, 10h50
  2. Lancer une commande Perl dans un script Shell
    Par Ryo_san dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 02/06/2008, 11h01
  3. Réponses: 7
    Dernier message: 06/01/2007, 20h16
  4. Shell - Impossible de lancer une commande
    Par marocleverness dans le forum Linux
    Réponses: 2
    Dernier message: 05/06/2006, 10h14
  5. lancer une commande dos dans une page ASP
    Par noznoz78 dans le forum ASP
    Réponses: 4
    Dernier message: 13/02/2006, 19h06

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