2014-04-27 8 views
14

में व्यर्थ मान मेरी PostgreSQL डेटाबेस में मैं गया निम्न तालिकाओं (सरलीकृत) है:PostgreSQL: विदेशी कुंजी स्तंभ

CREATE TABLE quotations (
    receipt_id bigint NOT NULL PRIMARY KEY 
); 

    CREATE TABLE order_confirmations (
    receipt_id bigint NOT NULL PRIMARY KEY 
    fk_quotation_receipt_id bigint REFERENCES quotations (receipt_id) 
); 

मेरे समस्या अब पढ़ने इस प्रकार है:

मैं आदेश जो से संबंधित है पिछले उद्धरण (जो ठीक है 'कारण मैं एफके क्षेत्र का उपयोग करके संदर्भित उद्धरण के लिए इस तरह का एक आदेश संलग्न कर सकता हूं), लेकिन मैंने के बिना के मिलान के उद्धरण के बिना रखा है। एफके क्षेत्र तब शून्य होगा, अगर डेटाबेस मुझे निश्चित रूप से दे। दुर्भाग्यवश, मुझे त्रुटि विदेशी कुंजी बाधा का उल्लंघन करते हुए एक INSERT कथन में fk_quotation_receipt_id को NULL पर सेट करने का प्रयास करते समय त्रुटि प्राप्त होती है।

इन तालिकाओं को डिज़ाइन करते समय मैं अभी भी PgSQL 8.2 का उपयोग कर रहा था, जिसने पूर्ण मानों की अनुमति दी थी। अब मुझे 9.1.6 मिल गया है, जो इसके लिए अनुमति नहीं देता है।

मैं क्या इच्छा एक वैकल्पिक (या नल) विदेशी कुंजी बाधा order_confirmations (fk_quotation_receipt_id) → कोटेशन (receipt_id) है। मुझे आधिकारिक PgSQL दस्तावेज़ों में कोई संकेत नहीं मिल रहा है, और यूथर उपयोगकर्ताओं द्वारा पोस्ट किए गए समान मुद्दे पहले से ही पुराने हैं।

किसी भी उपयोगी संकेत के लिए धन्यवाद।

उत्तर

12

लापता कॉमा को सही करने के बाद 9.3 में मेरे लिए काम करता है। मुझे यकीन है कि यह 9.1

create table quotations (
    receipt_id bigint not null primary key 
); 

create table order_confirmations (
    receipt_id bigint not null primary key, 
    fk_quotation_receipt_id bigint references quotations (receipt_id) 
); 

insert into order_confirmations (receipt_id, fk_quotation_receipt_id) values 
    (1, null); 
INSERT 0 1 
+0

गायब कॉमा मुद्दा नहीं था (मैं प्रतिलिपि बनाते समय इसे भूल गया था), grrrrr)। यह पता चला कि क्लाइंट कोड ने NULL के बजाय 0 जोड़ा, और चूंकि यह एक तैयार कथन था, मैंने इसे लॉग में नहीं देखा। फिर भी आपके जवाब के लिए बहुत कुछ है। – Neppomuk

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