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


PostgreSQLでファイル内のSQLと実行結果を一緒に出力する方法

アプリケーション作成時のテスト工程などでテスト用のSQLファイルを実行した場合、psqlを使うと結果のみが出力されます。
psqlの-aオプションを使用することにより、ファイル内のSQLと実行結果を一緒に出力することができます。
以下にpsqlの-aオプションを使用した例を記します。

使用した環境

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

psqlで-aオプションの有無を試してみる

以下にpsqlコマンドの-aオプションを未使用の場合と使用した場合の結果を記します。
実行するにあたり、以下のように端末からデータベースを作成しました。

createdb testdb

また使用したSQLファイルは以下の通りです。

drop table if exists tbl1;

create table tbl1 (
col1 serial,
col2 varchar
);

insert into tbl1 (col2) values
('sakura'),
('tsubaki'),
('ajisai');

select * from tbl1;

psqlの-aオプションなしで実行してみる

psqlの-aオプションなしで実行した結果です。
test.sqlに記述されているSQLが実行され実行結果のみ表示されています。

$ createdb testdb
$ psql -f test.sql testdb
psql:test.sql:1: NOTICE:  テーブル"tbl1"は存在しません。省略します
DROP TABLE
psql:test.sql:6: NOTICE:  CREATE TABLEはシリアル列"tbl1.col1"用に暗黙的なシーケ ンス"tbl1_col1_seq"を作成します。
CREATE TABLE
INSERT 0 3
 col1 |  col2
------+---------
    1 | sakura
    2 | tsubaki
    3 | ajisai
(3 行)

psqlの-aオプションありで実行してみる

psqlの-aオプションありで実行した結果です。
test.sqlに記述されているSQLと実行結果の両方が表示されています。

$ psql -a -f test.sql testdb
drop table if exists tbl1;
DROP TABLE
create table tbl1 (
col1 serial,
col2 varchar
);
psql:test.sql:6: NOTICE:  CREATE TABLEはシリアル列"tbl1.col1"用に暗黙的なシーケ ンス"tbl1_col1_seq"を作成します。
CREATE TABLE
insert into tbl1 (col2) values
('sakura'),
('tsubaki'),
('ajisai');
INSERT 0 3
select * from tbl1;
 col1 |  col2
------+---------
    1 | sakura
    2 | tsubaki
    3 | ajisai
(3 行)

psqlの入出力オプション

参考までにpsqlの入出力オプションは以下のようなものがあります。

$ psql --help

<snip>

入出力オプション:
  -a, --echo-all           スクリプトからのすべての入力を表示
  -e, --echo-queries       サーバへ送信したコマンドを表示
  -E, --echo-hidden        内部コマンドが生成したクエリーを表示
  -L, --log-file=ファイル名 セッションログをファイルに吐き出す
  -n, --no-readline        拡張コマンドライン編集機能(readline)を無効にする
  -o, --output=ファイル名  クエリーの結果をファイル(または |パイプ)に送る
  -q, --quiet              静かに実行(メッセージなしで、クエリー出力のみ)
  -s, --single-step        シングルステップモード(各クエリーごとに確認)
  -S, --single-line         単一行モード(行末を SQL コマンドの終了とみなす)

添付ファイル: filetest.sql 960件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-05-24 (火) 11:05:00