PostgreSQL使ったWebサイトのDBでありがちなこと

ユーザーアカウントのテーブルのログインIDで
login_name VARCHAR(256) NOT NULL UNIQUE
なんて指定でユニークキーを貼ったのはいいが、Case SensitiveなIDになってしまい、気が付いたら大文字小文字を使い分けられてgdgdになる
# だけど「はてな」はMySQLじゃなかったの?って知らないけど
# どちらにせよはてながPostgreSQLだとは思ってません。もしかしてDBM?;)

解決策は関数インデックスを使って
CREATE UNIQUE INDEX indexname ON usertable (lower(login_name));
とすると、「Ryo」があるとき「ryo」はINSERTできなくなります。
けど、これじゃ「Ryo」がINSERTできちゃうんで、CHECK句を使って
login_name VARCHAR(256) NOT NULL UNIQUE CHECK (login_name = lower(login_name))
ってのもいいかも。

関連記事

コメントを書く

メールアドレスが公開されたり他で使われたりすることはありません* 印の項目は必須項目です。

*
(表示されません) *