Подтвердить что ты не робот

Сохранить результат 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"

Я пробовал несколько разных сочинений, но ничего не работает. Спасибо заранее.

4b9b3361

Ответ 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