2009-07-25 14 views
7

कृपया निम्न तालिका पर एक नजर है:postgres: बाधा जांच और शून्य मान

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

मैं एक बाधा जांच (y> x) जोड़ना चाहते हैं, लेकिन यह स्पष्ट रूप से की वजह से असफल हो जायेगी यह द्वारा उल्लंघन किया जाता है पंक्ति 'foobar'।

मैं एक बाधा कैसे बना सकता हूं जो कहता है: चेक (y> x), लेकिन केवल अगर y शून्य नहीं है?

उत्तर

11

वास्तव में, तुम सच में कुछ और करने की जरूरत नहीं है। यदि चेक अभिव्यक्ति सही या शून्य मान का मूल्यांकन करती है तो एक चेक बाधा संतुष्ट होती है।

आपका बाधा जांच (y> x) काम करेगा के रूप में अपने परिदृश्य में है, क्योंकि पंक्ति foobar बाधा का उल्लंघन नहीं होगा, क्योंकि यह शून्य पर

2

आप एक जांच अभिव्यक्ति में शून्य परीक्षण, इस तरह है डाल सकते हैं:

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

(PostgreSQL 8.4 पर परीक्षण)

+3

यह केवल आवश्यक नहीं है मूल्यांकन करता है। PostgreSQL मैन्युअल से उद्धरण: * यह ध्यान दिया जाना चाहिए कि चेक अभिव्यक्ति संतुष्ट है अगर चेक अभिव्यक्ति सही या शून्य मान का मूल्यांकन करती है। चूंकि अधिकांश अभिव्यक्ति शून्य मान पर मूल्यांकन करेंगे यदि कोई ऑपरेंड शून्य है, तो वे बाधित कॉलम में शून्य मानों को नहीं रोकेंगे। * (Http://www.postgresql.org/docs/8.1/static/ddl-constraints.html) –

संबंधित मुद्दे