- PR -

PostgreSQLでの一時テーブルについての質問

1
投稿者投稿内容
うる
常連さん
会議室デビュー日: 2005/10/16
投稿数: 41
投稿日時: 2006-01-22 16:11
みなさんこんにちわ。

サーブレットでPostgreSQLを使っているのですが。
PostgreSQLで一時テーブルを作成するために、
CREATE TEMPORARY TABLE xxx....
というような感じでテーブルを作成しました。
マニュアルでは、この一時テーブルはセッション毎に独立していると書いてあるのですが、
ブラウザを二つ立ち上げて確認してみると、
同じテーブルを参照しているような状態となっています。
レコード1つ挿入した後、全てのレコードを表示するプログラムを作ったのですが、
ブラウザAでプログラムを動かした後、ブラウザBでもプログラムを動かすと、
ブラウザAでの挿入内容がブラウザBにも表示されます(ブラウザABとも同じテーブルをアクセスしている)。
ちなみに、ブラウザAとBは同じPCで動かしています。
セッションはPC毎に区切られるのでしょうか?それならば納得いくのですが。。。
ハツキタツミ
大ベテラン
会議室デビュー日: 2005/05/24
投稿数: 108
投稿日時: 2006-01-22 17:14
ブラウザからアクセスしているとはいえ、DBへアクセスしている実体は
Webサーバですから、あたりまえの動作です。
PCを変えても同じです。
せん
ぬし
会議室デビュー日: 2002/03/04
投稿数: 397
投稿日時: 2006-01-22 18:43
引用:

うるさんの書き込み (2006-01-22 16:11) より:
レコード1つ挿入した後、全てのレコードを表示するプログラムを作ったのですが、
ブラウザAでプログラムを動かした後、ブラウザBでもプログラムを動かすと、
ブラウザAでの挿入内容がブラウザBにも表示されます(ブラウザABとも同じテーブルをアクセスしている)。


例えば、
ブラウザAで、挿入したレコードが2件だとすると、
ブラウザBで、処理を動かすと、レコードが4件になる、といっていますか?

この前提が間違っていなければ、以下の質問に答えてもらえますか?


質問1
 ブラウザB で SQL を4回発行している、という事はありませんか?
 プログラムの作りによりますが、変数のスコープによってはあり得る状況と思います。

質問2
 DB への接続はどのようにしておこなっていますか?
 
質問3
 上記の例で、ブラウザBが4件になるのであれば、ブラウザC で処理を行なうと、
 6件になるんでしょうか。

質問4
 使用されている Postgres のバージョンを教えて下さい。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-01-22 18:55
データベースのセッションとサーブレットのセッションがごっちゃになっている?
うる
常連さん
会議室デビュー日: 2005/10/16
投稿数: 41
投稿日時: 2006-01-22 18:57
回答ありがとうございます。

>例えば、
>ブラウザAで、挿入したレコードが2件だとすると、
>ブラウザBで、処理を動かすと、レコードが4件になる、といっていますか?

はい、そうです。
ブラウザBでも2件挿入する事になるので、4件になります。

>質問1
 ブラウザB で SQL を4回発行している、という事はありませんか?
 プログラムの作りによりますが、変数のスコープによってはあり得る状況と思います。

この可能性は無いと思います。


>質問2
 DB への接続はどのようにしておこなっていますか?
 
DataSourceを使用して接続しています。

>質問3
 上記の例で、ブラウザBが4件になるのであれば、ブラウザC で処理を行なうと、
 6件になるんでしょうか。

はい、そうなります。

>質問4
 使用されている Postgres のバージョンを教えて下さい。

Ver1.4.1です。
Windows版です。


[ メッセージ編集済み 編集者: うる 編集日時 2006-01-22 18:58 ]
うる
常連さん
会議室デビュー日: 2005/10/16
投稿数: 41
投稿日時: 2006-01-22 19:47
>データベースのセッションとサーブレットのセッションがごっちゃになっている?

同じものだと思ってました。
サーブレットのセッションで一時的なテーブルを作成する方法はありませんでしょうか。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-01-22 19:58
PostgreSQL にはサーブレットのセッションは伝わっていませんので、分けて考える必要がありますね。
サーブレットのセッションIDをもとにテーブルを作るとか、毎回テーブルを作るのではなくセッションIDをキーにしてデータを insert するとかはどうでしょう?
せん
ぬし
会議室デビュー日: 2002/03/04
投稿数: 397
投稿日時: 2006-01-23 03:34
引用:

うるさんの書き込み (2006-01-22 18:57) より:

>質問4
 使用されている Postgres のバージョンを教えて下さい。

Ver1.4.1です。
Windows版です。


それは、Postgres ではなくて、PowerGres ですよね?
# ベースとなっているのは、Postgres 7.3.9 らしいです。


CREATE TEMPORARY TABLE を実行する際に「ON COMMIT」は
記述されていますか?
この場合ですと、デフォルト動作の「PRESERVE ROWS」ではなく、
「DELETE ROWS」もしくは、「DROP」が求められているとおもいます。
1

スキルアップ/キャリアアップ(JOB@IT)