110 votes

PostgreSQL : Comment passer des paramètres depuis la ligne de commande ?

J'ai une requête quelque peu détaillée dans un script qui utilise des espaces réservés ? Je voulais tester cette même requête directement depuis la ligne de commande psql (en dehors du script). Je veux éviter d'entrer et de remplacer tous les ? par des valeurs réelles, à la place, j'aimerais passer les arguments après la requête.

Exemple:

 SELECT  * 
FROM    foobar
WHERE   foo = ?
   AND  bar = ?
    OR  baz = ?  ;

Vous cherchez quelque chose comme :

 %> {select * from foobar where foo=? and bar=? or baz=? , 'foo','bar','baz' };

204voto

Gavin Points 1797

Vous pouvez utiliser la construction -v par exemple

 psql -v v1=12  -v v2="'Hello World'" -v v3="'2010-11-12'"

puis référez-vous aux variables dans sql comme :v1, :v2 etc.

 select * from table_1 where id = :v1;

Veuillez faire attention à la façon dont nous passons la valeur chaîne/date en utilisant deux guillemets " '...' "

33voto

vol7ron Points 11270

Trouvé dans PostgreSQL, vous pouvez utiliser des instructions PREPARE comme vous le pouvez dans un langage de script. Malheureusement, vous ne pouvez toujours pas utiliser ? , mais vous pouvez utiliser la notation $n

En utilisant l'exemple ci-dessus :

 PREPARE foo(text,text,text) AS
    SELECT  * 
    FROM    foobar
    WHERE   foo = $1
       AND  bar = $2
        OR  baz = $3  ;
EXECUTE foo('foo','bar','baz');
DEALLOCATE foo;

14voto

wildplasser Points 17900

Dans psql, il existe un mécanisme via le

 \set name val

commande, qui est censée être liée à l'option de ligne de commande -v name=val Les citations sont douloureuses, dans la plupart des cas, il est plus facile de mettre toute la viande de la requête dans un shell here-document.

Éditer

oups, j'aurais dû dire -v au lieu de -P (qui est pour les options de formatage), la réponse précédente avait raison.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X