web-dev-qa-db-ja.com

postgresqlの結果をbash変数に保存する

以下のスクリプトのように、bash変数にスカラーpostgresql-valueを格納する方法は?

dbname="testlauf"
username="postgres"

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

私はいくつかの異なる文章を試しましたが、何もうまくいかないようです。前もって感謝します。

30
knutella

引数の直前に_-c_オプションを置きます-クエリ。追加の_-t_オプションを使用してタプル値のみを取得することもできます。そしてもちろん、バッククォート(`)演算子を使用します。

_-X_オプションを使用することもお勧めします。これは、_.psqlrc_ファイルが列出力を無効にする_-A_オプションだけでなく、冗長な出力を追加する場合があるためです(空白文字)。

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

-tオプションまたは--tuples-onlyを使用すると、行のみが提供されるため、それらを配列変数に格納するのが簡単になります(クエリからの結果が複数の場合)

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

例:

クエリ結果

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

配列変数にする

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