シェルスクリプトなどからpsqlコマンドを介し、PostgreSQLにSQLを発行したいことはありませんか?
このような場合、psqlの-cオプションにより実現することができます。
$ lsb_release -dr Description: CentOS release 5.7 (Final) Release: 5.7
$ postgres --version postgres (PostgreSQL) 8.4.7
psqlコマンドに--helpオプションとして渡すと以下のメッセージが表示されます。
-cオプションは下記の通り、「(SQLまたは内部の)単一コマンドを一つだけ実行して終了」を実現します。
$ psql --help psql は PostgreSQL の会話型ターミナルです。 使用方法: psql [オプション]... [データベース名 [ユーザ名]] 一般的なオプション: -c, --command=コマンド (SQLまたは内部の)単一コマンドを一つだけ実行して終了 <省略>
つまり、以下のようにすればコマンドラインからSQL文を実行することができます。
psql データベース名 各種接続オプション(ホスト名やユーザ名など) -c 実行したいSQL文
-cオプションを試す前に、createdbコマンドによりfooデータベースを作成しました。
$ createdb foo
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 行)
INSERT文を試してみます。
$ psql foo -c "insert into t1(a, b) values(1,1),(2,2);" INSERT 0 2
SELECT文を試してみます。
$ psql foo -c "select * from t1;" a | b ---+--- 1 | 1 2 | 2 (2 行)
以上のように psql の -c オプションによりコマンドラインからSQLを実行することができます。