web-dev-qa-db-fra.com

stocker le résultat postgresql dans la variable bash

Comment stocker une valeur scalaire postgresql sur une variable bash comme dans le 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 écrits différents, mais rien ne semble fonctionner. Merci d'avance.

25
knutella

Placez l'option -c juste avant son argument - la requête. Remarquez également que vous utilisez l’option supplémentaire -t pour obtenir uniquement la valeur Tuple. Et bien sûr, utilisez l'opérateur backticks ( `).

L'utilisation de l'option -X est également recommandée, car un fichier .psqlrc peut parfois ajouter une sortie redondante, ainsi que l'option -A, qui désactive l'alignement des colonnes (espaces).

vartest=`psql -X -A -d $dbname -U $username -h localhost -p 5432 -t -c "SELECT gid FROM testtable WHERE aid='1'"`
45
Kouber Saparev

L'utilisation de l'option -t ou de --tuples-only vous donnera uniquement les lignes, ce qui facilitera leur stockage dans une variable de tableau (si le résultat de la requête contient plusieurs requêtes)

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

en faire une variable de tableau

    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
1
Ratnakri