#navi(../)
* psqlコマンドを利用しコマンドラインからSQLを実行する方法 [#be043e00]
シェルスクリプトなどからpsqlコマンドを介し、PostgreSQLにSQLを発行したいことはありませんか?~
このような場合、psqlの-cオプションにより実現することができます。
#contents
#htmlinsertpcsp(db-top.html,db-sp.html)
* テスト環境 [#o202ebe1]
- Linux
$ lsb_release -dr
Description: CentOS release 5.7 (Final)
Release: 5.7
- PostgreSQL
$ postgres --version
postgres (PostgreSQL) 8.4.7
*関連資料 [#x0ec8cbd]
-[[psqlによる出力をタプルのみにする方法>PostgreSQL/psqlによる出力をタプルのみにする方法]]
* psqlの''-c''オプション [#yed8b6b3]
psqlコマンドに--helpオプションとして渡すと以下のメッセージが表示されます。~
''-c''オプションは下記の通り、「(SQLまたは内部の)単一コマンドを一つだけ実行して終了」を実現します。
$ psql --help
psql は PostgreSQL の会話型ターミナルです。
使用方法:
psql [オプション]... [データベース名 [ユーザ名]]
一般的なオプション:
-c, --command=コマンド (SQLまたは内部の)単一コマンドを一つだけ実行して終了
<省略>
つまり、以下のようにすればコマンドラインからSQL文を実行することができます。
psql データベース名 各種接続オプション(ホスト名やユーザ名など) -c 実行したいSQL文
* 実施前のPostgreSQL環境構築 [#o0da697e]
''-c''オプションを試す前に、createdbコマンドによりfooデータベースを作成しました。
$ createdb foo
* ''-c''オプションでcreate table [#d0c3595d]
SQL文部分をシングルクオートで囲み実行(ダブルクオートでもOK)~
また、最後のセミコロンがなくても動作します。
- テーブルの作成
$ psql foo -c 'create table t1 (a int, b int);'
CREATE TABLE
- 作成したテーブルを確認
$ psql foo -c "select * from pg_tables where schemaname='public';"
schemaname | tablename | tableowner | tablespace | hasindexes | hasrules | hastriggers
------------+-----------+------------+------------+------------+----------+-------------
public | t1 | sakura | | f | f | f
(1 行)
* ''-c''オプションでINSERT [#cfa9e1e4]
INSERT文を試してみます。
$ psql foo -c "insert into t1(a, b) values(1,1),(2,2);"
INSERT 0 2
* ''-c''オプションでSELECT [#pb13b930]
SELECT文を試してみます。
$ psql foo -c "select * from t1;"
a | b
---+---
1 | 1
2 | 2
(2 行)
以上のように psql の ''-c'' オプションによりコマンドラインからSQLを実行することができます。
#htmlinsertpcsp(db-btm.html,db-sp.html)