一次テーブルを利用しようとしたが仕様がいまいち
わからなかったのですこしまとめました。
大きく2点のまとめです。
1.一次テーブルをとりあえず作ったらどのタイミングで消えるのか
2.BEGIN,COMITのトランザクション間で一次テーブルを利用するにはどうすれば良いのか
この2つについて記載いたします。
環境情報 | 構築日 | ソフトウェア |
---|---|---|
CentOS 6.3 | 2013/07/06 | postgresql8.4 |
1.一次テーブルをとりあえず作ったらどのタイミングで消えるのか
こちらについては、とりあえず一次テーブルを作る意味合いのメモです。
$ psql -- 以下SQL文を記載 -- 一次テーブルを作成 CREATE TEMP TABLE temptable1(id numeric(9,0)); -- この時点ではtemptable1は残っている INSERT INTO temptable1 VALUES(1); -- この時点ではtemptable1は残っている BEGIN; INSERT INTO temptable1 VALUES(2); INSERT INTO temptable1 VALUES(3); -- この時点ではtemptable1は残っている SELECT * FROM temptable1; COMMIT; -- この時点ではtemptable1は残っている SELECT * FROM temptable1; -- この時点ではtemptable1は残っている ¥q -- この時点でtemptable1は削除される $ psql -- この時点でtemptable1は存在しない ¥d temptable1
と、上記のようになります。
特に意識せずに一次テーブルを作成すると、¥qで全体を抜けるまで
一次テーブルが有効です。ちなみにコンソールを2つ表示し
それぞれpsqlコマンドで同じDBに入っても作った方意外からは見えません。
これが一次テーブルです。
2.BEGIN,COMITのトランザクション間で一次テーブルを利用するにはどうすれば良いのか
こちらの使い方を自分で使いたかったのでまとめました。
$ psql -- 以下SQL文を記載 BEGIN; -- 一次テーブルを作成 COMMIT DROPオプションがつきます CREATE TEMP TABLE temptable1(a numeric(9,0)) ON COMMIT DROP; -- テーブルが存在します。 ¥d temptable1 COMMIT; -- テーブルが存在しません。 ¥d temptable1
このようにトランザクションを張る場合は、COMMIT DROPが有効です。
重たい動作をされる際にご利用ください。