2014/09/12
PostgreSQL > 列なしテーブルの使いみち
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
で 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