2014/09/12
PostgreSQL
 >  列なしテーブルの使いみち
恥ずかしながら先日の PostgreSQL アンカンファレンス@東京で初めて、列なしテーブルを作れることを知りました。ぬこ@横浜さんの発表で。9.4 で SELECT ; が可能になり列なしテーブルに INSERT できるけど誰得?という話だったわけですが。

で 9.4 以前も含め、列なしテーブルの使いみちが何かないかな−と考えて、COPY … FROM PROGRAM で戻り値のない DOS コマンドを実行する時の受け皿にしてみました。↓ Win7 + PostgreSQL 9.3 でテスト。



↓ テーブル作成が簡単に済み、何回実行しても行が増えないのでスッキリです。



フォルダ既存なら MKDIR がエラーになるので、pgAdmin のクエリツールでフォルダの有無を確認したり ↓、例外処理と組み合わせてフォルダチェックに使えるかも。データフォルダ内は pg_ls_dir というシステム管理関数がありますが。(9.3 日本語ドキュメント)


ところで 9.4 だと、INSERT … SELECT ; するとテーブルの行が増える一方、上のように COPY だと行が増えません。不思議です。(Beta2 で確認)




↑ このように INSERT … SELECT ; で「列はないけど行はある」テーブルになります。しかし ↓ COPY の受け皿にすると 0 rows affected で行が増えません。


↓ COPY 実行後の列なしテーブル。実行前と同じ行数です。


↓ COPY から実行した DOS コマンドの結果確認。


COPY + DOS コマンドの真面目な?使用例は、例えば ↓ に書きました。

2014/07/03 COPY + DIR コマンドでファイル一覧表
http://kenpg.seesaa.net/article/400934238.html
<< 例のメッセージなしで Rgui を起動
VBS + BAT でクエリの試行錯誤 >>