Có thể trong PostgreSQL để tạo ra một ràng buộc duy nhất khó chịu trên một cột ký tự, nhưng không phân biệt chữ hoa chữ thường không?Ràng buộc duy nhất, không phân biệt chữ hoa chữ thường
Giả sử bảng cơ bản sau đây:
CREATE TABLE sample_table (
my_column VARCHAR(100)
);
Nếu chế deferrable là không cần thiết, nó cũng đơn giản như việc tạo ra chỉ số duy nhất với chức năng, ví dụ:
CREATE UNIQUE INDEX my_unique_index ON sample_table(UPPER(my_column));
thu nhập hoãn lại ràng buộc kiểm tra đòi hỏi phải tạo ràng buộc một cách rõ ràng, ví dụ:
ALTER TABLE sample_table
ADD CONSTRAINT my_unique_constraint UNIQUE(my_column)
DEFERRABLE INITIALLY IMMEDIATE;
Và unfortunatel y không thể sử dụng các hàm tùy ý trong ràng buộc duy nhất.
Một workaround có thể sẽ tạo ra cột bổ sung với nội dung tương tự như my_column
, nhưng trường hợp trên, được cập nhật thông qua một kích hoạt sau mỗi lần cập nhật/chèn, sau đó tạo ra một hạn chế duy nhất deferrable trên cột nhân tạo này. Điều này, tuy nhiên, âm thanh như một hack thực sự xấu xí.
Hoặc, có thể sử dụng CREATE CONSTRAINT TRIGGER
và kiểm tra thủ công tính độc đáo phân biệt chữ hoa chữ thường (dĩ nhiên, chỉ mục thông thường vẫn cần thiết). Điều này nghe có vẻ một chút quá phức tạp cho một yêu cầu đơn giản (và phổ biến, tôi giả sử) như vậy.
Có cách nào đơn giản và/hoặc thanh lịch hơn xung quanh giới hạn này không?
bạn Postgres phiên bản? –
Hiện tại là 9.1. Tuy nhiên, nếu có một giải pháp tốt đẹp có sẵn trên các phiên bản mới hơn tôi sẽ rất vui khi đọc về nó :) –
Kiểm tra các ràng buộc 'EXCLUDE'. Chúng có thể được thiết lập, hoạt động như trường hợp không nhạy cảm 'UNIQUE'. –