PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 29/05/2018 19:53:47

Mangone
Membre

Problème d'automatisation de script

onsoir,

Merci pour cette oreille attentive, merci à ceux qui nous éclairent quand on ne sait plus ou donner de la tête.
Si je suis revenu ce soir, s'est que j'ai un problème que je n'arrive pas à résoudre. Je remercie toutes contribution.
Il s'agit dee scripts qui font appel à des fichiers sql et l'objectif est pour moi de faire un lancement pour tout dérouler .
J'ai vraiment besoin de cette aide.
1) Ajout de nouvelle colonne dans la table "clients"
* Fichier .sql contenant : psql -f
Alter table client add column mise_a_jour date;

2) Mise en place de données dans la table clients
*Fichier .sql contenant : psql -f
update tracks_transmitter set mise_a_jour = (select DETECTEDLAST from client where oid = _oid and wid = _wid) where mise_a_jour  is null;

3) Un Pg-dump

#!/bin/bash

#SCRIPT DE SAUVEGARDE DE LA TABLE clients

PGPATH="/usr/bin"
QUIET="-q"

#### TODO : VARIABLE A CHANGER SI BESOIN
CPV_DB_NAME="MYDATABASE" #Nom de la base de données cible
CPV_DB_PORT=5544 #Numéro de port associé au cluster
REST_D="/mnt/MyPC/DUMP" #Dossier ou se trouve le .dump
#Restauration

sudo -u postgres pg_dump -p $CPV_DB_PORT -d $CPV_DB_NAME -a -F c -t clients  --disable-triggers --verbose -f /mnt/MyPC/DUMP/client-a-c.dump 

Voilà mes amis, je cherche à automatiser tout cela .
Je vous remercie de bien vouloir m'aider s'il vous plait

Hors ligne

#2 29/05/2018 21:23:03

gleu
Administrateur

Re : Problème d'automatisation de script

Je ne suis pas sûr de comprendre votre demande. Vous avez déjà tout pour le faire. Il y a toutes les instructions (sauf que j'utiliserais plutôt psql -c que psql -f, mais ça ne change pas grand chose).


Guillaume.

Hors ligne

#3 29/05/2018 21:28:51

Mangone
Membre

Re : Problème d'automatisation de script

Bonsoir Guillaume,

Merci pour ta réponse . Il est vrai que j'ai testé toutes ces instructions, elles fonctionnent toutes.
Mon problème je veux que la lancement soit automatique et non de façon individuelle. Je veux que la 1ère instruction lance toutes les autres instructions.
Je ne sais pas si je suis clair sans mon projet ?
Je pense que si !

Hors ligne

#4 29/05/2018 21:41:08

gleu
Administrateur

Re : Problème d'automatisation de script

Il faut les mettre toutes dans un script (un fichier qui contient ces instructions), et exécuter le script.


Guillaume.

Hors ligne

#5 29/05/2018 21:48:50

Mangone
Membre

Re : Problème d'automatisation de script

Hey oui Guillaume, C'est là que j'ai un problème, et c'est encore là ou je sollicite le forum  pour une aide vraiment précieuse.
Je suis preneur de toute aide dans ce sens .
Merci d'avance

Hors ligne

#6 30/05/2018 09:06:35

ruizsebastien
Membre

Re : Problème d'automatisation de script

bonjour,

Je suis comme guillaume, je ne vois pas où est votre problème.
Pourquoi le fait de tout mettre dans un script vous pose problème ?
Ou alors il y a quelque chose qui m'échappe...


Cordialement,

Sébastien.

Hors ligne

#7 30/05/2018 19:23:47

Mangone
Membre

Re : Problème d'automatisation de script

Bonjour Sébastien ,

Je viens de voir ta réponse et je te remercie . Je vais argumenté au niveau des problème que cela me pose .
Voici ce que j'ai pu établir comme script d'automatisation mais j'ai des messages d'erreurs au lancement:

Script:
#!/bin/bash

#SCRIPT de sauvegarde de la table clients
#A exécuter en tant que postgres ou via "sudo -u postgres Livrable.sh"

PGPATH="/usr/bin"
QUIET="-q"

#### TODO : VARIABLE A CHANGER SI BESOIN
CPV_DB_NAME="MYDATABASE" #Nom de la base de données cible
CPV_DB_PORT=5333 #Numéro de port associé au cluster
REST_D="/mnt/MYDATABASE/DUMP" #Dossier ou se trouve le .dump

function sql_query(){
  postgres -u psql -p "$CPV_DB_PORT" -d "$CPV_DB_NAME" -c "$1"
}
#1)Ajout de colonne mise_a_jour dans la table clients
sql_query "Alter table clients add column mise_a_jour date;"

#2)mise en place des données de la colonne MAJ
sql_query "update clients set mise_a_jour = (select DETECTEDLAST from numéro de carte where oid = _oid and wid = _wid) where mise_a_jour  is null;"

#3)Re-création de la nouvelle table client
sql_query "alter table clients drop constraint fk xxxxxxxxxxxxx";
sql_query "alter table clients rename to first_frist clients";
sql_query "create  table clients
        _oid int8 not null,
        _wid int8 not null,
        tracks_oid int8 not null,
        tracks_wid int8 not null,
        mise_a_jour date,
        primary key (_oid, _wid, tracks_oid, tracks_wid)";

#4)Remplissage de la table clients
pg_restore -p $CPV_DB_PORT -d $CPV_DB_NAME -a -F c -t clients  --disable-triggers --verbose -f /mnt/MYDATABASE/DUMP/clients-a-c.dump 


Je sais que toutes ces commandes tapées individuellement en ligne de commande fonctionnent. Lorsque je j'utilise cette fonction elle génére des erreurs du genre "Livrable.sh: ligne 15 $'\302\240 :command introuvable. 
La ligne 15 correspond à : postgres -u psql -p "$CPV_DB_PORT" -d "$CPV_DB_NAME" -c "$1"

Voilà les problèmes auxquels je suis confrontés.
Merci d'avance pour l'écoute et le dépannage .

Hors ligne

#8 30/05/2018 21:43:20

gleu
Administrateur

Re : Problème d'automatisation de script

Dire "elle génére des erreurs du genre" ne nous aide pas du tout. Il nous faut les vrais messages d'erreur et surtout les premiers s'il y en a plusieurs.

Ceci étant dit, ce message d'erreur laisse supposer qu'il y a des caractères invisibles devant le nom de la commande. De plus, pour cette fonction, même sans cette erreur de commande introuvable, "postgres -u psql -p...", je n'ai aucune idée de ce que ça veut dire ?!?! Il n'existe pas d'option -u à la commande postgres, et de toute façon, on ne peut pas indiquer la commande psql à la commande postgres.

Enfin, un dernier point, plutôt que d'utiliser des variables inventées comme CPV_DB_NAME et CPV_DB_PORT, pourquoi ne pas utiliser les variables prévues par PostgreSQL ? (respectivement PG_DATABASE et PG_PORT) Ça vous éviterait d'avoir à les utiliser avec les options -p et -d. Et grâce à ça, ça vous permettrait de dégager la fonction sql_query pour avoir quelque chose de bien plus simple avec psql.


Guillaume.

Hors ligne

#9 30/05/2018 22:48:20

Mangone
Membre

Re : Problème d'automatisation de script

Bonsoir Guillaume ,

Est-ce que tu penses que cette syntaxe est correcte :

function sql_query(){

  sudo -u postgres psql -p "$PG_PORT" -d "$PG_DATABASE" -c "$1"
}

Hors ligne

#10 31/05/2018 09:31:05

gleu
Administrateur

Re : Problème d'automatisation de script

Oui, cette syntaxe est bonne.


Guillaume.

Hors ligne

Pied de page des forums