3

psqlの結果をbashで取得しようとしています

echo 'SELECT * FROM fictive_table LIMIT 1;' >> /tmp/x.sql
psql --single-transaction -d dbname -f /tmp/x.sql
echo $?

これは失敗しますが、bashで得られる結果は0です。ロジック/コードに問題はありますか?

マニュアルより

psqlは、正常に終了した場合は0をシェルに返し、それ自体の致命的なエラー(メモリ不足、ファイルが見つからない)が発生した場合は1を返します。

更新:@AndreaSpadacciniは正しいです。これは致命的ではありません。どうすればそれを捕まえることができますか?

4

2 に答える 2

3

おそらく、クエリによってトリガーされる種類のエラーは、マニュアルに記載されているような致命的なエラーではありません。つまり、メモリが不足することはなく、ファイルが見つからないというエラーも発生しません。

マニュアルをもう少し読んで、私はそれを読みました:

psqlは、正常に終了した場合は0をシェルに返し、1はそれ自体の致命的なエラー(メモリ不足、ファイルが見つかりません)が発生した場合、2はサーバーへの接続が不良でセッションが対話型ではなかった場合、3はスクリプトでエラーが発生し、変数ON_ERROR_STOPが設定されました。

エラーをキャッチするには、次のことを試してください。

  • ON_ERROR_STOP変数を設定します。また、
  • アプローチを変更し、クエリ出力をファイルに保存してから、そのファイルを操作します。
于 2011-03-31T14:12:40.707 に答える
0

このオプション-oを使用して、クエリの結果をpsql(コマンドラインターミナル)からファイルに書き込みます。
ドキュメントごと

-oファイル名
--output = filename

すべてのクエリ出力をファイルfilenameに入れます。これは、コマンド\oと同等です。
于 2012-07-31T05:37:53.577 に答える