Re: Variable de script psql

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

In response to

Browse pgsql-fr-generale by date

  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