résultat du stock de postgresql dans la variable bash

comment atore une valeur postgresql scalaire sur une variable bash comme dans script ci-dessous?

dbname="testlauf"
username="postgres"

vartest='psql -c -d $dbname -U $username -h localhost -p 5432 "SELECT gid FROM testtable WHERE aid='1';"'
echo "$vartest"

j'ai essayé plusieurs différentes écrits, mais rien ne semble fonctionner. Merci à l'avance.

22
demandé sur Ansgar Wiechers 2013-03-06 12:53:31

2 réponses

mettez le -c option juste avant son argument - la requête. L'esprit aussi en utilisant le-t option pour obtenir juste la valeur de tuple. Et bien sûr, utiliser les backticks (`) de l'opérateur.

-X option est également recommandée, comme parfois un .psqlrc le fichier peut ajouter une sortie redondante, ainsi que le -A option, qui désactive la colonne aligning (espaces).

vartest=`psql -X -A -d $dbname -U $username -h localhost -p 5432 -t -c "SELECT gid FROM testtable WHERE aid='1'"`
37
répondu Kouber Saparev 2017-10-04 10:34:11

en utilisant l'option-t ou --tuples-only vous donnera les lignes seulement, donc il sera plus facile de les stocker dans la variable array (si le résultat de la requête plus d'un)

vartest =(`psql -t -d $dbname -U $username -c "SELECT gid FROM testtable WHERE aid='1';"`)
echo $vartest

exemple:

résultat de la requête

ubuntu@ratnakri:~$ psql -h localhost -p 5432 -t -U postgres -d postgres -c "select slot_name from pg_replication_slots"
barman
barman2

faire un tableau de variable

    ubuntu@ratnakri:~$ RESULT=(`psql -h localhost -p 5432 -t -U postgres -d postgres -c "select slot_name from pg_replication_slots"`)
    ubuntu@ratnakri:~$ echo ${RESULT[0]}
    barman
    ubuntu@ratnakri:~$ echo ${RESULT[1]}
    barman2
0
répondu Ratnakri 2018-01-17 07:47:00