2012-01-28 25 views
15

Tôi muốn đạt được tính đơn nhất không phân biệt chữ hoa chữ thường trong cột VARCHAR. Tuy nhiên, không có kiểu dữ liệu văn bản không phân biệt dạng chữ trong Postgres. Vì trường hợp văn bản gốc không quan trọng, nên chuyển đổi tất cả thành chữ thường/chữ hoa trước khi chèn vào một cột có ràng buộc UNIQUE. Ngoài ra, nó sẽ yêu cầu một INDEX để tìm kiếm nhanh.Postgresql: văn bản chữ thường tự động trong khi (hoặc trước) chèn vào cột

Có cách nào trong Postgres thao tác dữ liệu trước khi chèn không?

Tôi đã xem câu hỏi khác này: How to automatically convert a MySQL column to lowercase. Điều này gợi ý sử dụng trình kích hoạt khi chèn/cập nhật vào văn bản chữ thường hoặc sử dụng chế độ xem với văn bản thấp hơn. Nhưng, không có phương pháp được đề xuất nào đảm bảo tính duy nhất.

Ngoài ra, vì dữ liệu này sẽ được đọc/ghi bởi các ứng dụng khác nhau, nên việc giảm bớt dữ liệu trong mỗi ứng dụng riêng lẻ không phải là một ý tưởng hay.

+5

Không có câu trả lời hiện tại nào thực sự viết thường dữ liệu trước khi chèn, đó là những gì được hỏi. Xem http://stackoverflow.com/questions/18807709/create-a-postgres-rule-or-trigger-to-automatically-convert-a-column-to-lowercase. –

Trả lời

25

Bạn không cần một kiểu dữ liệu case-insensitive (mặc dù there is one)

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

Bằng cách đó, bạn thậm chí không cần phải mess xung quanh với dữ liệu gốc.

+0

Đã xác minh, nó hoạt động chính xác như tôi muốn. Lưu trữ dữ liệu nhạy cảm với trường hợp (không bắt buộc, nhưng tốt để có), nhưng thực thi tính độc đáo phân biệt chữ hoa chữ thường. – user1144616

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

From the manual:

Việc sử dụng các chỉ số để thực thi ràng buộc duy nhất có thể được coi một chi tiết thực hiện mà không cần phải truy cập trực tiếp.

+3

Tôi đã sử dụng điều này, vì tôi có thể cho phép ứng dụng của tôi xử lý dữ liệu ở định dạng chữ thường, trong khi sử dụng DB cho những gì tốt cho việc kiểm tra tính toàn vẹn. –

Các vấn đề liên quan