#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)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS