2012-01-28 13 views
15

varcharカラムで大文字小文字を区別しない一意性を実現したい。しかし、Postgresでは大文字と小文字を区別しないテキストデータ型はありません。元の大文字小文字は重要ではないので、UNIQUE制約を持つ列に挿入する前に、すべてを小文字/大文字に変換することをお勧めします。また、迅速な検索のために1つのINDEXが必要です。Postgresql:カラムの挿入中(または挿入前)にテキストを自動小文字にする

挿入前にデータを操作する方法はありますか?

私はこの他の質問:How to automatically convert a MySQL column to lowercaseを見ました。 テキストの小文字の挿入/更新時にトリガを使用するか、テキストを小文字にしたビューを使用することを推奨します。しかし、示唆された方法のどれも一意性を保証するものはありません。

また、このデータはさまざまなアプリケーションで読み書きされるため、個々のアプリケーションごとにデータを小さくすることはお勧めできません。

あなたも、元のデータと周りの混乱に持っていない道( there is oneが)

CREATE UNIQUE INDEX idx_lower_unique 
    ON your_table (lower(the_column)); 

あなたは大文字と小文字を区別しないデータ型を必要としない

+5

現時点での回答のうち、挿入前のデータを実際に小文字にするものはありません。これは尋ねられているものです。 http://stackoverflow.com/questions/18807709/create-a-postgres-rule-or-trigger-to-automatically-convert-a-column-to-lowercaseを参照してください。 –

答えて

25

+0

確認済みですが、それは私が欲しかったのとまったく同じです。大文字と小文字を区別するデータを格納します(必須ではありませんでしたが、持つのは良い)が、大文字と小文字を区別しない一意性を強制します。 – user1144616

16
ALTER TABLE your_table 
    ADD CONSTRAINT your_table_the_column_lowercase_ck 
    CHECK (the_column = lower(the_column)); 

From the manual

一意性制約を適用するインデックスの使用が直接アクセスされるべきではない 実装の詳細と考えられます。

+3

私はこれを使用しました。私のアプリケーションで正しい小文字の形式でデータを入力できるようにすることができます。 –

関連する問題