कुछ अलग तार के लिए इनपुट विवश करें


12

नमस्ते, मैं जिस तरह से मैं postgreSQL में उम्मीद है कि एक बाधा काम पाने के लिए प्रतीत नहीं कर सकते। Pgadmin के भीतर से मैं निम्नलिखित SQL क्वेरी को निष्पादित करता हूं।

-- Check: "TypeCheck"

-- ALTER TABLE "ComLog" DROP CONSTRAINT "TypeCheck";

ALTER TABLE "ComLog"
  ADD CONSTRAINT "TypeCheck" CHECK ("Type" SIMILAR TO 'email|post|IRL|minutes');
COMMENT ON CONSTRAINT "TypeCheck" ON "ComLog" IS 'One of email|post|IRL|minutes';

जब इसे क्रियान्वित किया जाता है।

-- Check: "TypeCheck"

-- ALTER TABLE "ComLog" DROP CONSTRAINT "TypeCheck";

ALTER TABLE "ComLog"
  ADD CONSTRAINT "TypeCheck" CHECK ("Type" ~ similar_escape('email|post|IRL|minutes'::text, NULL::text));
COMMENT ON CONSTRAINT "TypeCheck" ON "ComLog" IS 'One of email|post|IRL|minutes';

मुझे उम्मीद है कि यह ईमेल इनपुट IRL या मिनट में से किसी एक प्रकार के कॉलम के लिए मेरे इनपुट को सीमित कर देगा। हालाँकि, तालिका डेटा दर्ज करते समय यह अवरोध तब विफल हो जाता है जब मैं इनमें से किसी एक प्रकार में प्रवेश करता हूं। प्रकार स्तंभ वर्ण प्रकार का है। क्या कोई जानता है कि इसे कैसे ठीक करें। धन्यवाद।


3
जब तक मैं कुछ समझ नहीं रहा हूँ, क्या ऐसा करने के लिए पढ़ने के लिए बहुत आसान नहीं होगा एक कारण है CHECK (type in ('email','post','IRL','minutes')?
रफूस्का

जवाबों:


16

अपने अवरोध को बदलें

CHECK (type IN ('email','post','IRL','minutes'))

इसे पार्सर में परिवर्तित किया जाएगा:

CHECK (type = ANY( ARRAY['email','post','IRL','minutes']))

वही करना चाहिए जो आप देख रहे हैं।

हालाँकि मुझे आश्चर्य होगा कि क्या ऐसा करना बेहतर नहीं होगा:

CREATE TABLE comlog_types (
     type text
);

और फिर बाधा को लागू करने के लिए एक विदेशी कुंजी जोड़ें। इससे भविष्य में प्रकार जोड़ना आसान हो जाएगा।


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

2
हाँ, यह अच्छी तरह से काम करता है। लेकिन आप PostgreSQL के एनम डेटा प्रकार की जांच भी कर सकते हैं ।
XåpplI'-I0llwlg'I -
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.