PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

ENUM डेटा प्रकार को पोस्टग्रेज करता है या CONSTRINT की जांच करता है?

टिप्पणियों और उत्तरों के आधार पर, और कुछ प्राथमिक शोध के आधार पर, मेरे पास पोस्टग्रेस-एरती से टिप्पणियों के लिए निम्नलिखित सारांश है। वास्तव में आपके इनपुट की सराहना करेंगे।

Postgres डेटाबेस तालिका कॉलम में प्रविष्टियों को प्रतिबंधित करने के तीन तरीके हैं। "रंगों" को संग्रहीत करने के लिए एक तालिका पर विचार करें जहाँ आप केवल 'लाल', 'हरा', या 'नीला' को मान्य प्रविष्टियाँ बनाना चाहते हैं।

  1. प्रगणित डेटा प्रकार

    CREATE TYPE valid_colors AS ENUM ('red', 'green', 'blue');
    
    CREATE TABLE t (
        color VALID_COLORS
    );
    

    लाभ यह है कि इस प्रकार को एक बार परिभाषित किया जा सकता है और फिर आवश्यकतानुसार कई तालिकाओं में पुन:उपयोग किया जा सकता है। एक मानक क्वेरी ENUM प्रकार के सभी मानों को सूचीबद्ध कर सकती है, और इसका उपयोग एप्लिकेशन फॉर्म विजेट बनाने के लिए किया जा सकता है।

    SELECT  n.nspname AS enum_schema,  
            t.typname AS enum_name,  
            e.enumlabel AS enum_value
    FROM    pg_type t JOIN 
            pg_enum e ON t.oid = e.enumtypid JOIN 
            pg_catalog.pg_namespace n ON n.oid = t.typnamespace
    WHERE   t.typname = 'valid_colors'
    
     enum_schema | enum_name     | enum_value 
    -------------+---------------+------------
     public      | valid_colors  | red
     public      | valid_colors  | green
     public      | valid_colors  | blue
    

    नुकसान हैं, ENUM प्रकार सिस्टम कैटलॉग में संग्रहीत है, इसलिए इसकी परिभाषा देखने के लिए ऊपर के रूप में एक क्वेरी की आवश्यकता है। तालिका परिभाषा देखते समय ये मान स्पष्ट नहीं होते हैं। और, चूंकि एक ENUM प्रकार वास्तव में एक डेटा प्रकार है जो बिल्ट इन NUMERIC और TEXT डेटा प्रकारों से अलग है, नियमित संख्यात्मक और स्ट्रिंग ऑपरेटर और फ़ंक्शन इस पर काम नहीं करते हैं। इसलिए, कोई ऐसा प्रश्न नहीं कर सकता जैसे

    SELECT FROM t WHERE color LIKE 'bl%'; 
    
  2. बाधाओं की जाँच करें

    CREATE TABLE t (
        colors TEXT CHECK (colors IN ('red', 'green', 'blue'))
    );
    

    दो फायदे हैं, एक, "जो आप देखते हैं वही आपको मिलता है," यानी, कॉलम के लिए मान्य मान सीधे तालिका परिभाषा में दर्ज किए जाते हैं, और दूसरा, सभी मूल स्ट्रिंग या संख्यात्मक ऑपरेटर काम करते हैं।

  3. विदेशी कुंजियाँ

    CREATE TABLE valid_colors (
        id SERIAL PRIMARY KEY NOT NULL,
        color TEXT
    );
    
    INSERT INTO valid_colors (color) VALUES 
        ('red'),
        ('green'),
        ('blue');
    
    CREATE TABLE t (
        color_id INTEGER REFERENCES valid_colors (id)
    );
    

    मूल रूप से एक ENUM प्रकार बनाने के समान ही, मूल संख्यात्मक या स्ट्रिंग ऑपरेटरों को छोड़कर, और मान्य मानों को खोजने के लिए सिस्टम कैटलॉग को क्वेरी करने की आवश्यकता नहीं है। color_id . को लिंक करने के लिए शामिल होना ज़रूरी है वांछित टेक्स्ट मान के लिए।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एसक्यूएल ऐरे से स्ट्रिंग्स के ऐरे में परिणाम सेट को कनवर्ट करें

  2. PostgreSQL में किसी तालिका के सूची कॉलम नाम और डेटाटाइप कैसे प्राप्त करें?

  3. हाइबरनेट एनोटेशन के साथ PostgreSQL सीरियल प्रकार का मानचित्रण

  4. Postgresql में किसी क्वेरी को कैसे रोकें/मारें?

  5. क्लाउड विक्रेता डीप-डाइव:Google क्लाउड प्लेटफ़ॉर्म (GCP) पर PostgreSQL