2009-07-25 48 views
7

xin vui lòng có một cái nhìn tại bảng sau:postgres: ràng buộc kiểm tra và các giá trị null

name | x | y 
---------+-----+------ 
    foo | 3 | 5 
    bar | 45 | 99 
    foobar | 88 | 
    barfoo | 0 | 45 

Tôi muốn thêm một ràng buộc kiểm tra (y> x), nhưng đây rõ ràng là sẽ thất bại do nó bị vi phạm bởi hàng 'foobar'.

Làm cách nào để tạo một ràng buộc cho biết: kiểm tra (y> x), nhưng chỉ khi y không null?

Trả lời

11

Trong thực tế, bạn không thực sự cần phải làm bất cứ điều gì khác. Ràng buộc kiểm tra được thỏa mãn nếu biểu thức kiểm tra đánh giá đúng hoặc giá trị null.

KIỂM TRA khó khăn của bạn (y> x) sẽ làm việc như là trong kịch bản của bạn bởi vì foobar hàng sẽ không vi phạm các hạn chế vì nó interval là Null

2

Bạn có thể đặt một LÀ kiểm tra NULL vào biểu KIỂM TRA, như thế này:

CREATE TABLE mytable (
    name TEXT, 
    x INTEGER, 
    y INTEGER CHECK (y IS NULL OR y > x) 
); 

(thử nghiệm trên PostgreSQL 8.4)

+3

này chỉ đơn giản là không cần thiết. Trích dẫn từ hướng dẫn sử dụng PostgreSQL: * Cần lưu ý rằng ràng buộc kiểm tra được thỏa mãn nếu biểu thức kiểm tra đánh giá đúng hoặc giá trị null. Vì hầu hết các biểu thức sẽ đánh giá giá trị null nếu bất kỳ toán hạng nào là null, chúng sẽ không ngăn các giá trị null trong các cột bị ràng buộc. * (Http://www.postgresql.org/docs/8.1/static/ddl-constraints.html) –

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