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’;」を実行できています。