From: | François Figarola <francois(dot)figarola(at)i-consult(dot)fr> |
---|---|
To: | philippe(dot)beaudoin(at)bull(dot)net |
Cc: | pgsql-fr-generale(at)postgresql(dot)org |
Subject: | Re: Variable de script psql |
Date: | 2009-06-24 10:15:08 |
Message-ID: | 4A41FCAC.5090600@i-consult.fr |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-fr-generale |
philippe(dot)beaudoin(at)bull(dot)net a écrit :
> Bonjour à tous,
>
> Comme je me casse les dents depuis quelques heures sur un petit problème
> pratique, j'appelle à l'aide...
> Nous avons des personnes dans des équipes de développement qui doivent
> écrire des scripts SQL à exécuter par psql.
> Ils doivent tester les scripts sur une base de test, avant de les envoyer
> aux centres de production qui devront les exécuter sur une ou plusieurs
> bases de données suivant les cas. En production, l'appel de psql est
> intégré dans un script shell (linux), dont l'exécution est déclenchée par
> les automates d'exploitation.
>
> Je cherche à faire un script shell simple permettant de tester ces scripts
> psql avant envoi, le but étant que ces scripts puissent ensuite être
> utilisé en production sans avoir à changer un seul caractère. Il faut donc
> prendre en compte les petites différences entre les environnements de test
> et de production. Pour le nom des bases, le port des clusters, les
> pathnames des fichiers de script sql et de log des résultats, pas de
> problème puisque ce sont soit des variables externes (à positionner par
> EXPORT), soit des paramètres de la commande psql. Mais je butte sur le nom
> de fichiers de sortie pour des commandes \copy.
>
> Il faudrait que je puisse rendre variable le pathname d'une commande :
> \copy <table> to <pathname>
> J'ai essayé d'ajouter des options -v à la commande psql pour passer des
> variables. Mais quand j'écris
> \copy <table> to :var
> la variable :var n'est pas substituée (et j'obtiens un beau fichier nommé
> ... :var !)
> Idem si la variable est définie par un \set , alors que \echo :var affiche
> bien le contenu de la variable.
> Je n'ai donc pas trouvé la bonne syntaxe, si elle existe...
>
> J'ai également exploré une piste utilisant des liens symboliques créés puis
> supprimés dans le script shell, permettant d'avoir dans le sql un nom de
> fichier constant. Mais ceci n'est pas satisfaisant car cela empêcherait
> d'exécuter en même temps le script pour plusieurs bases du même serveur,
> créant des contraintes de planification génantes.
>
> Merci par avance pour toute aide sur ce sujet.
> Cordialement. Philippe.
>
>
>
>
>
Effectivement, l'utilisation de \copy avec une variable semble
soit bugguée, soit limitée à une constante chaine, je n'arrive
pas non plus à la faire fonctionner comme tu le voudrais...
Il me semble possible d'utiliser un biais via la commande \o :
\o :mavariable -- redirige la sortie de psql vers
le fichier pointé par :mavar
\copy nom_table to stdout -- Effectue la copie de la table
\o -- arrête la redirection
Cordialement.
--
François Figarola
-- développeur --
=================
INTERNET CONSULT
Mas Guerido
6 rue Aristide Bergès
66330 CABESTANY
Tel 04.68.66.09.29
fax 04.68.66.99.50
* francois(dot)figarola(at)i-consult(dot)fr
From | Date | Subject | |
---|---|---|---|
Next Message | Guillaume Lelarge | 2009-06-24 10:34:36 | Re: Variable de script psql |
Previous Message | philippe.beaudoin | 2009-06-24 08:50:21 | Variable de script psql |