[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 メーリングリストの案内