このエントリーをはてなブックマークに追加


psqlによる出力をタプルのみにする方法

psqlの-cオプションを利用し返却された文字列をシェルスクリプトなどで利用しようとするとき、カラム名の表示を消して、結果のみ取得したい場合がありますよね。
本記事は、psqlコマンドを利用してSQL結果のみ返却する方法を記します。

関連資料

テスト環境

  • Linux
    $ lsb_release -dr
    Description:    CentOS release 5.7 (Final)
    Release:        5.7
  • PostgreSQL
    $ postgres --version
    postgres (PostgreSQL) 8.4.7

-t (--tuples-only) オプションによりカラム名を非表示にする

以下、psql --helpを実行したときの出力です。

$ psql --help
psql は PostgreSQL の会話型ターミナルです。
使用方法:
  psql [オプション]... [データベース名 [ユーザ名]]
<snip>
  -t, --tuples-only        行のみを表示
<snip>

上記の使用方法を見ると、-t または --tuples-only オプションを利用すればカラム名が表示されなくなります。

t (--tuples-only) オプションを試してみる

実際に -t (--tuples-only) オプション を試しています。
以下の内容のテーブルを使用しました。

$ psql -c 'select * from t1;' foo
 a | b 
---+---
 1 | 1
 2 | 2
(2 行)
  • 行数を取得してみます。
    $ psql -t -c 'select count(*) from t1' foo
         2
     
    こんな風にすればシェル変数に入れることもできます。
    $ COUNT=`psql -t -c 'select count(*) from t1' foo`
    $ echo $COUNT
    2
    
    上記の場合だと、桁あわせの為、不要なスペースや改行も含まれます。削除したい場合は-Aオプションを使用します。
    $ psql -t -A -c 'select count(*) from t1' foo
    2
  • sumの値をカラム名無しで取得してみます。
    $ psql -t -c 'select sum(a), sum(b) from t1' foo
       3 |   3
    カラム名が削除されていますが、区切り文字が|です。
    これ区切り文字をカンマにするには、以下のようにします。
    $ psql -t -A -F , -c 'select sum(a), sum(b) from t1' foo
    3,3

以上、コマンドラインからSQLを実行し値を取得する方法を記しました。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-03-20 (金) 22:08:00