Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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

pgsql-fr-generale by date

Next:From: Guillaume LelargeDate: 2009-06-24 10:34:36
Subject: Re: Variable de script psql
Previous:From: philippe.beaudoinDate: 2009-06-24 08:50:21
Subject: Variable de script psql

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group