[pgsql-jp: 34700] 重複登録を制限する方法

choice choice-site @ choice-site.com
2005年 1月 20日 (木) 19:11:03 JST


中出と申します。

以下のようなテーブルに会員データを重複なしにデータを
登録したいと思っています。(nameとemailが同じデータは
登録したくない)

create table test(
 id serial primary key,
 name varchar(50),
 email varchar(100)
);


それで以下のような感じのSQLを発行しようと思っています。

---
begin transaction;
lock table test in EXCLUSIVE MODE;
select id from test where name='名前' and email='メルアド';

データがあれば
rollback;

データがなければ
insert into test(name,email) values('名前','メルアド');
commit transaction;
---

ここで、ふと思ったのですが、testテーブルに

UNIQUE ("name","email")

のような制約をつけておけば、テーブルをロックしなくても
いいのではないかと。

そこで質問なんですが、アクセスの多いサイトの場合、
lockを使ったほうが負荷が低くすむのでしょうか?
それともuniqueを使ったほうが負荷が低くすむのでしょうか?
ご存知の方がおられましたらご教示いただければ幸いです。

また、他に負荷が低く納まるような方法がございましたら
教えてくださいませ。

なお、postgresのバージョンは7.2.3です。

以上、よろしくお願いします。





----
nakade




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