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 :

[14.1] Impossible d'utiliser la commande psql dans un script shell


Sujet :

PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Urbaniste
    Inscrit en
    Septembre 2014
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2014
    Messages : 51
    Par défaut [14.1] Impossible d'utiliser la commande psql dans un script shell
    Bonjour,

    J'ai trouvé sur le net un script shell qui me permet d'importer une série de fichiers dans une base de données postgresql (je n'ai malheureusement plus le lien...). Ayant déjà eu des aventures avec psql, je l'avais déjà ajouté à la variable path. (Notez que les seules réponses que j'ai pu trouver étaient de le renseigner dans le path, mais dans mon cas c'est déjà fait...). Dans l'attente j'ai fait la manip en exécutant chaque commande manuellement (sans script), et ça marche... Mais c'est dommage...

    Du coup je peux faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    psql --version
    psql (PostgreSQL) 14.1
    Mais quand je lance mon script shell :
    Il me retourne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monscript.sh: line 12: psql: command not found
    Le contenu de mon script :
    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
    42
    # script d'import des données DFI de la DGFiP dans postgresql
     
    psql -h localhost -p 5434 -U postgres -d dgfip_dfi -w -c "
    -- table pour l'import des données brutes
    CREATE TABLE IF NOT EXISTS dgfip_dfi_raw (raw text);
    TRUNCATE dgfip_dfi_raw;
    "
     
    # import fichier texte dans fichier 'raw' intermédiaire
    for f in *.txt.zip
    do
      zcat $f | psql -h localhost -p 5434 -U postgres -d dgfip_dfi -w -c "copy dgfip_dfi_raw FROM STDIN WITH (FORMAT CSV, HEADER FALSE, DELIMITER '@')"
    done
     
    psql -h localhost -p 5434 -U postgres -d dgfip_dfi -w -c "
     
    -- table de description des DFI
    DROP TABLE IF EXISTS dgfip_dfi;
    CREATE TABLE dgfip_dfi (id text, depcom char(5), id_dfi char(7), nature_dfi char(1), validation char(8), lot char(5), meres text[], filles text[]);
     
    -- création des DFI et parcelles 'mères'
    INSERT INTO dgfip_dfi SELECT replace(left(raw,20)||substr(raw,63,5),';','') as id, left(raw,2)||substr(raw,5,3) as depcom, substr(raw,13,7) as id_dfi, substr(raw,21,1) as nature_dfi, substr(raw,23,8) as validation, substr(raw,63,5) as lot, string_to_array(substr(replace(replace(left(substr(raw,70),-1),' ','0'),';',';'||left(raw,2)||substr(raw,5,3)||substr(raw,9,3)),2),';') as meres FROM dgfip_dfi_raw WHERE substr(raw,69,1)='1';
     
    -- index sur code commune, préfixe, dfi et lot (en principe unique)
    CREATE INDEX dgfip_dfi_id ON dgfip_dfi (id);
     
    -- ajout des parcelles 'mères'
    WITH u AS (SELECT replace(left(raw,20)||substr(raw,63,5),';','') as u_id, string_to_array(substr(replace(replace(left(substr(raw,70),-1),' ','0'),';',';'||left(raw,2)||substr(raw,5,3)||substr(raw,9,3)),2),';') as parcelles FROM dgfip_dfi_raw WHERE substr(raw,69,1)='2') UPDATE dgfip_dfi SET filles=parcelles from u WHERE id=u_id;
     
    -- index sur les parcelles mères et filles
    CREATE INDEX dgfip_dfi_meres ON dgfip_dfi USING GIN (meres);
    CREATE INDEX dgfip_dfi_filles ON dgfip_dfi USING GIN (filles);
     
    -- suppression de la table 'raw' intermédiaire
    -- DROP TABLE dgfip_dfi_raw;
    "
     
    # export JSON
    # psql -h localhost -p 5434 -U postgres -d dgfip_dfi -w -c "copy (select json_build_object('id', id, 'depcom',depcom, 'id_dfi',id_dfi, 'lot_dfi',lot, 'nature',nature_dfi, 'date',validation::date, 'meres',meres, 'filles',filles) from dgfip_dfi) to STDOUT;" | gzip -9 > dfi.json.gz
     
    # export postgresql
    pg_dump -h localhost -p 5434 -U postgres -d dgfip_dfi -w -t dgfip_dfi -o -O -x | gzip -9 > dfi.sql.gz
    Est-ce que vous savez d'où peut venir mon problème ?

  2. #2
    Membre Expert
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 959
    Par défaut
    Bonsoir
    le commentaire ligne m'a déjà posé beaucoup de petites misères, maintenant je n'utilise plus que les commentaires en bloc
    -- commentaire ligne
    /* commentaire bloc */

    A voir si ça aide ...

    Sinon faut simplifier le code à outrance pour en faire un cas d'école et soumettre ça à qui de droit (=> vers le shell ou vers Pg ?)

  3. #3
    Membre confirmé
    Homme Profil pro
    Urbaniste
    Inscrit en
    Septembre 2014
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2014
    Messages : 51
    Par défaut
    Bonsoir, et merci pour ce tuyau.

    Malheureusement, cela n'a pas résolu mon soucis. Du coup je vais, je pense, suivre votre second conseil et essayer de poser des questions, soit du côté de shell, soit du côté de PG...

    Encore merci !

Discussions similaires

  1. Impossible d'utiliser la commande mail
    Par Trebor dans le forum Administration système
    Réponses: 2
    Dernier message: 06/01/2020, 11h04
  2. Résultat de la commande grep dans un script shell
    Par koa31770 dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 02/07/2019, 11h58
  3. Exécuter une commande sudo dans un script shell
    Par lodacom dans le forum Shell et commandes GNU
    Réponses: 11
    Dernier message: 24/04/2014, 13h37
  4. 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
  5. [UBUNTU] Impossible d'utiliser la commande make
    Par guigui_cosmos dans le forum Ubuntu
    Réponses: 12
    Dernier message: 13/04/2007, 14h25

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