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

Postgres में SQL सर्वर के पहचान कॉलम के बराबर कैसे बनाएं

tl;डॉ

अब पोस्टग्रेस 10 में, पहचान के रूप में डिफ़ॉल्ट द्वारा उत्पन्न निर्दिष्ट करें SQL मानक के अनुसार।

create table tower 
(
  npages integer, 
  ifnds integer, 
  ifnid integer, 
  name varchar(20), 
  towid integer GENERATED BY DEFAULT AS IDENTITY    -- per SQL standard
)

पहचान कॉलम

Postgres 10 अब पहचान कॉलम की अवधारणा का समर्थन करता है , और मानक SQL सिंटैक्स का उपयोग करता है। जबकि मैं MS SQL सर्वर का कोई विशेषज्ञ नहीं हूँ, मेरा मानना ​​है कि यह नया मानक समर्थन समकक्ष है।

जेनरेट किया गया ... पहचान के रूप में

जनरेट किया गया ... पहचान के रूप में तालिका बनाएं . के दौरान प्रयुक्त कमांड एक निहित अनुक्रम बनाता है। SERIAL के विपरीत, उस क्रम का निर्माण, नामकरण, अनुमतियां और छोड़ना आपके लिए पारदर्शी है . अब बहुत सहज ज्ञान युक्त। यदि आप तालिका को उपयोग की अनुमति देते हैं, तो उन्हें अनुक्रम की अनुमति मिलती है। यदि आप तालिका छोड़ते हैं, तो अनुक्रम स्वचालित रूप से गिरा दिया जाता है।

मानक वाक्यविन्यास के दो स्वाद। अंतर केवल तभी मायने रखता है जब आप एक मूल्य उत्पन्न करने के बजाय एक मूल्य पारित करते हैं। आम तौर पर, लोग हमेशा जेनरेट किए गए मान पर भरोसा करते हैं, इसलिए आम तौर पर आप पहले संस्करण का उपयोग करेंगे, पहचान के रूप में डिफ़ॉल्ट द्वारा जेनरेट किया गया

  • पहचान के रूप में डिफ़ॉल्ट द्वारा उत्पन्न
    • एक मान उत्पन्न करता है जब तक कि INSERT आदेश एक मूल्य प्रदान करता है।
  • हमेशा पहचान के रूप में उत्पन्न होता है
    • INSERT द्वारा प्रदान किए गए किसी भी मान को अनदेखा करता है जब तक ओवरराइडिंग सिस्टम वैल्यू निर्दिष्ट न किया जाए

देखें तालिका बनाएं दस्तावेज़ीकरण के लिए पृष्ठ।

पढ़ें यह दिलचस्प पेज पीटर एसेंट्रौट द्वारा। वे SERIAL . के साथ कुछ अजीब मुद्दों के बारे में बताते हैं . नई पहचान कॉलम सुविधा के साथ ऐसी कोई समस्या नहीं है। इसलिए SERIAL . का उपयोग करने का कोई कारण नहीं है अब और नहीं, कोई डाउनसाइड नहीं, केवल अपसाइड; सीरियल GENERATED … AS IDENTITY . द्वारा प्रतिस्थापित किया जाता है .

ध्यान दें कि एक पहचान कॉलम जरूरी प्राथमिक कुंजी नहीं है, और स्वचालित रूप से अनुक्रमित नहीं होता है। तो आपको अभी भी प्राथमिक कुंजी निर्दिष्ट करने की आवश्यकता है स्पष्ट रूप से यदि यह आपका इरादा है (जैसा कि आमतौर पर होता है)।

CREATE TABLE person_ (

    id_ 
        INTEGER 
        GENERATED BY DEFAULT AS IDENTITY   -- Replaces SERIAL. Implicitly creates a SEQUENCE, specified as DEFAULT.
        PRIMARY KEY                        -- Creates index. Specifies UNIQUE. Marks column for relationships.
        ,

    name_ 
        VARCHAR( 80 )

) ;

इरादा आंतरिक कार्यान्वयन विवरण आपसे छिपाए जाने का है। आपको कवर के नीचे उत्पन्न होने वाले अनुक्रम का नाम जानने की आवश्यकता नहीं है। उदाहरण के लिए, आप अंतर्निहित अनुक्रम को जाने बिना कॉलम के माध्यम से काउंटर को रीसेट कर सकते हैं।

ALTER TABLE person_ 
    ALTER COLUMN id_ 
    RESTART WITH 1000      -- Reset sequence implicitly, without a name.
;

परोक्ष रूप से पहचान निर्दिष्ट करना:

  • चिह्नित स्तंभ शून्य नहीं
  • एक क्रम बनाता है
    • अनुक्रम का प्रकार कॉलम से मेल खाता है (32-बिट 64-बिट आदि)
  • अनुक्रम को कॉलम से जोड़ता है
    • अनुमति प्राप्त करता है
    • कैस्केड गिर रहा है
    • कॉलम का नाम बदलने पर भी कॉलम से जुड़ा रहता है
  • अनुक्रम को उस कॉलम के डिफ़ॉल्ट मानों के स्रोत के रूप में निर्दिष्ट करता है

पहचान कॉलम CREATE SEQUENCE<के समान विकल्प ले सकता है /कोड> :

  • शुरू से शुरू करें
  • MINVALUE minvalue | कोई MINVALUE नहीं
  • MAXVALUE अधिकतम मान | कोई MAXVALUE नहीं
  • इन्क्रीमेंट [ BY ] इंक्रीमेंट
  • चक्र | कोई चक्र नहीं
  • कैश कैशे
  • किसी के स्वामित्व में नहीं
    (पहचान कॉलम के लिए स्वामित्व निर्दिष्ट करना मेरे लिए कोई मायने नहीं रखता क्योंकि स्वामित्व स्वचालित रूप से प्रबंधित होता है)

विकल्पों का मूर्खतापूर्ण उदाहरण:

id_ INTEGER 
GENERATED BY DEFAULT AS IDENTITY ( 
    START WITH 200 
    MINVALUE 100 
    MAXVALUE 205 
    CYCLE 
    INCREMENT BY 3 
) PRIMARY KEY

4 पंक्तियाँ जोड़ना:



  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. पोस्टग्रेएसक्यूएल में एलपीएडी () फ़ंक्शन

  3. EXECUTE FORMAT का उपयोग कैसे करें ... पोस्टग्रेज फ़ंक्शन में उपयोग करना

  4. PostgreSQL में प्रति समूह अंतिम पंक्ति कैसे प्राप्त करें

  5. django नाक परीक्षण में hstore एक्सटेंशन स्थापित करना