#navi(../)
* PostgreSQLでヒアドキュメンとpsqlでSQLを実行する方法 [#a5f6e2f0]
シェルスクリプトにSQLを記述してPostgreSQLを操作したい事がありますよね。~
本資料では、ヒアドキュメントを使用してSQLを実行してみたいと思います。
#contents
#htmlinsertpcsp(db-top.html,db-sp.html)
* 関連資料 [#b13d2281]
-[[コマンドラインからSQLを実行する方法>PostgreSQL/コマンドラインからSQLを実行する方法]]
-[[PostgreSQLでファイル内のSQLと実行結果を一緒に出力する方法>PostgreSQL/ファイル内のSQLと実行結果を一緒に出力する方法]]
-[[ヒアドキュメント内の変数を展開しない方法>http://linux.just4fun.biz/%E9%80%86%E5%BC%95%E3%81%8D%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88/%E3%83%92%E3%82%A2%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88%E5%86%85%E3%81%AE%E5%A4%89%E6%95%B0%E3%82%92%E5%B1%95%E9%96%8B%E3%81%97%E3%81%AA%E3%81%84%E6%96%B9%E6%B3%95.html]]
-[[ヒアドキュメントをファイルに出力する方法>http://linux.just4fun.biz/%E9%80%86%E5%BC%95%E3%81%8D%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88/%E3%83%92%E3%82%A2%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88%E3%82%92%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AB%E5%87%BA%E5%8A%9B%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95.html]]
* ヒアドキュメントを使用したシェルスクリプトを作成し実行してみる [#ca194afe]
以下に記したシェルスクリプトを使用し実行してみます。
** 使用したシェルスクリプト [#cda7844b]
#ref(sql.sh)
#!/bin/bash
psql <<_EOT
SELECT version();
CREATE DATABASE sakura;
\c sakura
CREATE TABLE tbl (a INT, b INT);
INSERT INTO tbl SELECT generate_series(1,100), generate_series(101,200);
SELECT COUNT(*) FROM tbl;
SELECT AVG(a), AVG(b) FROM tbl;
DROP TABLE tbl;
_EOT
上記のシェルスクリプトはpsqlコマンドに対し、_EOTから_EOTまでの文字列(SQL)を流し込みます。~
ヒアドキュメントに関しては、上記の関連資料のリンクを参照してください。
** 実行結果 [#o00c8999]
上記のスクリプトを起動した出力結果です。~
最後に作成したデータベースをドロップしています。
-bash-4.1$ chmod +x sql.sh
-bash-4.1$ ./sql.sh
version
------------------------------------------------------------------------------------------------------------------
PostgreSQL 8.4.13 on x86_64-redhat-linux-gnu, compiled by GCC gcc (GCC) 4.4.6 20120305 (Red Hat 4.4.6-4), 64-bit
(1 行)
CREATE DATABASE
データベース "sakura" に接続しました。.
CREATE TABLE
INSERT 0 100
count
-------
100
(1 行)
avg | avg
---------------------+----------------------
50.5000000000000000 | 150.5000000000000000
(1 行)
DROP TABLE
-bash-4.1$ dropdb sakura
#htmlinsertpcsp(db-btm.html,db-sp.html)