Сохранить результат postgresql в переменной bash
Как найти скалярное значение postgresql в bash -переменной, как в script ниже?
dbname="testlauf"
username="postgres"
vartest='psql -c -d $dbname -U $username -h localhost -p 5432 "SELECT gid FROM testtable WHERE aid='1';"'
echo "$vartest"
Я пробовал несколько разных сочинений, но ничего не работает. Спасибо заранее.
Ответы
Ответ 1
Поместите параметр -c
непосредственно перед его аргументом - запрос. Имейте в виду также использовать дополнительный параметр -t
, чтобы получить только значение кортежа. И, конечно, используйте оператор backticks (`).
Также рекомендуется использовать параметр -X
, так как иногда файл .psqlrc
может добавлять избыточный вывод, а также параметр -A
, который отключает выравнивание столбцов (пробелы).
vartest=`psql -X -A -d $dbname -U $username -h localhost -p 5432 -t -c "SELECT gid FROM testtable WHERE aid='1'"`
Ответ 2
Использование опции -t или -tuples-only даст вам только строки, поэтому их легче хранить в переменной массива (если результат запроса более одного)
vartest =(`psql -t -d $dbname -U $username -c "SELECT gid FROM testtable WHERE aid='1';"`)
echo $vartest
Пример:
результат запроса
[email protected]:~$ psql -h localhost -p 5432 -t -U postgres -d postgres -c "select slot_name from pg_replication_slots"
barman
barman2
превратить его в переменную массива
[email protected]:~$ RESULT=(`psql -h localhost -p 5432 -t -U postgres -d postgres -c "select slot_name from pg_replication_slots"`)
[email protected]:~$ echo ${RESULT[0]}
barman
[email protected]:~$ echo ${RESULT[1]}
barman2