このエントリーをはてなブックマークに追加


psqlコマンドを利用しコマンドラインからSQLを実行する方法

シェルスクリプトなどからpsqlコマンドを介し、PostgreSQLにSQLを発行したいことはありませんか?
このような場合、psqlの-cオプションにより実現することができます。

テスト環境

  • Linux
    $ lsb_release -dr
    Description:    CentOS release 5.7 (Final)
    Release:        5.7
  • PostgreSQL
    $ postgres --version
    postgres (PostgreSQL) 8.4.7

関連資料

psqlの-cオプション

psqlコマンドに--helpオプションとして渡すと以下のメッセージが表示されます。
-cオプションは下記の通り、「(SQLまたは内部の)単一コマンドを一つだけ実行して終了」を実現します。

$ psql --help
psql は PostgreSQL の会話型ターミナルです。

使用方法:
  psql [オプション]... [データベース名 [ユーザ名]]

一般的なオプション:
  -c, --command=コマンド   (SQLまたは内部の)単一コマンドを一つだけ実行して終了
<省略>

つまり、以下のようにすればコマンドラインからSQL文を実行することができます。

psql データベース名 各種接続オプション(ホスト名やユーザ名など) -c 実行したいSQL文

実施前のPostgreSQL環境構築

-cオプションを試す前に、createdbコマンドによりfooデータベースを作成しました。

$ createdb foo

-cオプションでcreate table

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

INSERT文を試してみます。

$ psql foo -c "insert into t1(a, b) values(1,1),(2,2);"
INSERT 0 2

-cオプションでSELECT

SELECT文を試してみます。

$ psql foo -c "select * from t1;"
 a | b 
---+---
 1 | 1
 2 | 2
(2 行)

以上のように psql の -c オプションによりコマンドラインからSQLを実行することができます。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-03-20 (金) 22:08:00