- PR -

DB(postgresql)において登録されてはずのデータが存在しない

投稿者投稿内容
mso
ぬし
会議室デビュー日: 2003/12/04
投稿数: 496
お住まい・勤務地: 宮城
投稿日時: 2004-12-15 11:05
msoです。

引用:

めぐさんの書き込み (2004-12-15 08:10) より:
どのようなJavaプログラムなのか分からりませんが、
あんとれさんが書かれたように、プログラムの中で最後にcommitしているんですよね。

デフォルトではautocommitが有効になっていると思ってましたが...




トランザクション制御で接続をしている際は
何もCommit/Rollbackをしないで終わらせると
Rollbackになりませんでしたか?

手元にPostgreSQLの環境が存在しないので、
テストができません。
どなたか詳しい人いませんか?
初心者
会議室デビュー日: 2004/12/14
投稿数: 6
投稿日時: 2004-12-15 12:33
引用:

めぐさんの書き込み (2004-12-15 08:10) より:
どのようなJavaプログラムなのか分からりませんが、
あんとれさんが書かれたように、プログラムの中で最後にcommitしているんですよね。

デフォルトではautocommitが有効になっていると思ってましたが...



おしゃられる通りデフォルトではautocommitなので
明示的にプログラムには記載していません。
めぐ
ベテラン
会議室デビュー日: 2004/11/09
投稿数: 86
お住まい・勤務地: 千葉県内
投稿日時: 2004-12-15 12:58
差し支えない範囲で、postgresql.confを示してもらえれば、
より有益な情報がもらえるかもしれませんが。
初心者
会議室デビュー日: 2004/12/14
投稿数: 6
投稿日時: 2004-12-15 15:30
引用:

めぐさんの書き込み (2004-12-15 12:58) より:
差し支えない範囲で、postgresql.confを示してもらえれば、
より有益な情報がもらえるかもしれませんが。



下記が設定変更した項目です。
max_connections = 500;
shared_buffers = 90000000;
sort_mem = 1024;
tcpip_socket = true;
post = 5432

また、一時的に
stats_start_collector = true;
stats_block_level = true;
としておりました。
後にコメントアウト。postgresql リブート
RedHatの共有メモリーを設定
/etc/sysctl.conf
kernel.shmmax=200000000
と設定しサーバリブート。
です。
postgresqlのバージョンは7.3.5を使用しています。
Postgresqlリリース情報を見るとバージョン7.3.8において
修正内容があるようなのですがこれにも関係するのかでしょうか。

[ メッセージ編集済み 編集者: 初心者 編集日時 2004-12-15 15:46 ]
めぐ
ベテラン
会議室デビュー日: 2004/11/09
投稿数: 86
お住まい・勤務地: 千葉県内
投稿日時: 2004-12-15 16:50
なかなか回答できなくてすいません。

引用:

初心者さんの書き込み (2004-12-15 12:33) より:
おしゃられる通りデフォルトではautocommitなので
明示的にプログラムには記載していません。



setAutoCommit(false);
なんてプログラムに書かれていたりしないですよねぇ。

ちなみに、そのinsert文のプログラムを2回走らせると、
1回目のデータのみが追加されてたりしません?
(当然、同じデータではエラーが出るでしょうから、
データ自体は変えて行ってみてください。)

それと、commit() を使ってみるとどうなりますか?
初心者
会議室デビュー日: 2004/12/14
投稿数: 6
投稿日時: 2004-12-15 18:31
引用:

setAutoCommit(false);
なんてプログラムに書かれていたりしないですよねぇ。

ちなみに、そのinsert文のプログラムを2回走らせると、
1回目のデータのみが追加されてたりしません?
(当然、同じデータではエラーが出るでしょうから、
データ自体は変えて行ってみてください。)

それと、commit() を使ってみるとどうなりますか?



返信ありがとうございます。
setAutoCommit(false);
書いてあってほしいんですけど、書いてないんです。。。
まず、現状はpostgresqlをりぶーとしたことにより現象がでなくなっております。
また、2回はしらせた場合でも登録されてないことを確認しました。
たとえばcommitしていなく、でもjavaからアクセスして登録したものselect出来るものなのでしょうか。
話がそれますが登録されているDBにA、Bと2つの情報があります。
データをCをinsertします。←insert miss(エラーとして出ず)
selectはA,Bのみ抽出可能。
上記のような現象は起こりうるのでしょうか。テーブルロック??

わかりにくいかもしれませんが、よろしくお願いいたします。

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