[pgsql-jp: 26640] Re: 会員登録の重複

S.Hase office.hase @ nifty.ne.jp
2002年 7月 9日 (火) 23:33:36 JST


はせです。

三村さん、大場さん、よしたけ@YYNさん、ご返事ありがとうございます。

会員テーブルにinsertする前に、POSTされたemailと会員テーブルemailの
重複チェックを行っているので、複数回POSTされても2回目以降はエラーで
登録できないようになっています。

考えられるのは、
1.複数回POSTされたが、何らかの要因で直前のPOSTでの登録データが
 hitしなかった。

2.POSTは1回しか行われていないが、何らかの要因で複数回のinsertが
 実行された。

の2つのケースかと思います。
かなりタイトなアクセスのあるサイトなので、動作時に何か特殊なことが
起きているのでは?と危惧しています。

1.はfsyncとか、関係するのでしょうか??
2.なんて事は、有り得るのでしょうか?


よしたけ@YYNさんのトランザクション処理も、確かに有効な気がします。
テストはむずかしいですが、とりあえずトランザクション処理を実装して
様子を見ようと思います。


はせ


> 
> よしたけ@YYNです。
> 
> > WebPageから会員情報を記入、「登録」ボタンを押すと
> > ・email重複チェック
> > ・会員テーブルinsert(pkeyはserial)
> > という流れで登録処理を行うのですが、何故かたまにemailの重複した
> > 会員データが登録されてしまいます。
> > 短時間の内に、複数innsertが連続して行われるようです。
> > 何故このような重複が発生するか?また、回避策をアドバイスお願いします。
> 
> トランザクションとロックをキーに検索される事をお薦めします。
> 具体的には、
> bigin;
> lock table 会員テーブル EXCLUSIVE MODE;
> select email from 会員テーブル where email = '<new_email>';
> 結果がOKなら
> insert into 会員テーブル (email) values ('<new_email>');
> commit;
> NGなら rollback;
> 
> でOKかと。
> 試してないので、鵜のみにせず調べてから使ってください。
> 
> ------------------------
> YYN partnership company
> Yoshitake Shinohara
> yoshi @ yyn.jp



pgsql-jp メーリングリストの案内