8

たとえば、値を格納するテーブルがあります。

select * from myvalue;

  val
-------
 12345
(1 row)

12345これをpostgresqlまたはシェルスクリプトの変数に保存するにはどうすればよいですか?

シェルスクリプトで試したのは次のとおりです。

var=$(psql -h host -U user -d db <<SQLSTMT
SELECT * FROM myvalue;
SQLSTMT)

しかしecho $var、私に与えます:

val ------- 12345 (1 row)

私も試してみました

\set var (select * from myvalue)

psql で入力すると、次の\setようにリストされます。

var = '(select*frommyvalue)'
4

6 に答える 6

12

ダメダメダメ!「-t」や「\t」などのpsqlからの「生データ」スイッチを使用し、ASCIIテーブルを解析する代わりにクエリをpsqlにパイプします:-)

echo 'select * from myvalue;' | psql -t -h host -U user -d db

psql出力の解析が本当に必要な場合は、-Hスイッチ(HTML出力をオンにする)を使用して、htmlテーブルを解析するためのperlモジュールで解析することもできます.1回か2回使用しました..また、pgpass ファイル~/.psqlrc、接続するデフォルト DB などの一部のデフォルトについては、指定されていません。

于 2012-09-21T18:08:13.970 に答える
6

psqlコマンドラインから SQLを受け入れる-c/オプションと、出力フォーマットを制御する/オプションがあります。--command=-t--tuples-only

$ psql -c 'select 1+1'
 ?column? 
----------
        2
(1 row)
$ psql -t -c 'select 1+1'
        2

$ VALUE=`psql -t -c 'select 1+1'`
$ echo $VALUE
2
于 2012-09-21T18:07:26.237 に答える
4
var=`psql -Atc "select 1;"`
echo $var
1
于 2012-09-22T03:00:44.327 に答える
2

この回答では、コプロセスを使用して とやり取りする 1 つの方法を説明しpsqlます。クエリを実行して 1 つの結果を取得することだけが必要な場合、これはやり過ぎですが、psql.

于 2012-09-21T23:56:33.450 に答える
1

psqlコマンドで取得した結果をフィルタリングできます。

var=$(psql -h host -U user -d db <<SQLSTMT
SELECT * FROM myvalue;
SQLSTMT)
var=$(cut -d' ' -f3 <<<$var)
于 2012-09-21T18:06:57.173 に答える
0

これらのどれも私にとってはうまくいきませんでしたが、これはうまくいきました:

median_avm=psql "host=${dps1000} port=#### dbname=@@@ user=${reduser} password=${redpass}" -c "SELECT AVG(column) FROM db.table;" -t

${dps1000}、${reduser}、${redpass} が定義されたソース ファイルを使用し、ポートとデータベース名を手動で入力する

于 2018-08-02T20:18:46.213 に答える