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

Re: Réf. : Re: [pgsql-fr-generale] Variable de script psql

From: Guillaume Lelarge <guillaume(at)lelarge(dot)info>
To: pgsql-fr-generale(at)postgresql(dot)org
Cc: philippe(dot)beaudoin(at)bull(dot)net
Subject: Re: Réf. : Re: [pgsql-fr-generale] Variable de script psql
Date: 2009-06-24 12:37:23
Message-ID: 200906241437.23836.guillaume@lelarge.info (view raw or flat)
Thread:
Lists: pgsql-fr-generale
Le mercredi 24 juin 2009 à 14:10:10, philippe(dot)beaudoin(at)bull(dot)net a écrit :
> >Bonjour,
> >
> >Le mercredi 24 juin 2009 à 10:50:21, philippe(dot)beaudoin(at)bull(dot)net a écrit :
> >> [...]
> >> 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...
> >
> >Remplacez le \copy par la commande SQL COPY. Et pensez à bien ajouter les
> >guillemets à la valeur de votre variable, ainsi par exemple :
> >
> >\set toto '''/home/guillaume/toto'''
>
> Merci pour les tuyaux.
> Mais la commande sql COPY pose un autre souci : il faut être superuser pour
> l'utiliser, ce qui ne va pas bien dans notre contexte.
>
> Je vais creuser l'idée de François.
> \o :mavariable                        -- redirige la sortie de psql vers
> \copy nom_table to stdout    -- Effectue la copie de la table
> \o                                             -- arrête la redirection
>
> Mais la sortie standard du script est déjà orientée vers un fichier au
> niveau de la commande
> psql -o ...
> En fait, on veut 2 fichiers de sortie : le log de la session psql d'un côté
> et le résultat du \copy.
> Je vais voir ce que cela peut donner.
>

Au cas où l'idée de François ne convienne pas, sachez qu'il est tout à fait 
possible de devenir superuser le temps de faire le copy :

[... début du script ...]
[... plein d'instructions ...]
SET ROLE TO postgres;
COPY...
SET ROLE TO ancien_role_pas_superuser;
[... plein d'instructions ...]
[... fin du script ...]

Par contre, ancien_role_pas_superuser doit être membre du rôle postgres.


-- 
Guillaume.
 http://www.postgresqlfr.org
 http://dalibo.com

In response to

pgsql-fr-generale by date

Next:From: Samuel ROZEDate: 2009-06-24 13:01:23
Subject: Re: Limite de connexions dépassée pour les utilisateurs standards
Previous:From: Guillaume LelargeDate: 2009-06-24 12:32:15
Subject: Re: Limite de connexions dépassée pour les utilisateurs standards

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