postgres シェルでSQL実行する方法

postgresでシェル上でSQLを実行する方法です。

実行結果はteeでログ掃き出し可能です。

RAISE NOTICE部分はpostgres設定ファイル次第になりますが、ログとして出力可能です。

シェルでSQL実行(引数なし)

#!/bin/bash

run_xxx() {
  /usr/bin/psql -U postgres << EOF
  do \$\$
        declare
        num_cnt int;
        begin
        select count(*) INTO num_cnt from kkkkk;
        RAISE NOTICE 'num_cnt=%', num_cnt;

  end;
    \$\$ LANGUAGE plpgsql;

  \q
EOF
}

run_xxx 2>&1 | tee 'output.log'

シェルでSQL実行(引数あり)

#!/bin/bash

a1=$1
run_xxx() {
  echo "=>$a1"

  /usr/bin/psql -U postgres << EOF
  do \$\$
        declare
        num_cnt int;
        begin
        select count(*) INTO num_cnt from kkkkk where ddd=$a1;
        RAISE NOTICE 'num_cnt=%', num_cnt;

  end;
    \$\$ LANGUAGE plpgsql;

  \q
EOF
}


run_xxx 2>&1 | tee 'output.log'

シェルでSQL実行(引数あり)の実行方法は、

./sample.sh \'ddd_value\'
=>'ddd_value'
NOTICE:  num_cnt=100000
DO

where句の部分にシェルで与えた引数が適用され、「select count(*) INTO num_cnt from kkkkk where ddd=’ddd_value’;」を実行できています。