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

यौगिक कुंजी के लिए पंक्तियों के प्रति समूह क्रमांक

मत। इसे कई बार आजमाया जा चुका है और यह दर्द होता है।

एक सादे serial का प्रयोग करें या IDENTITY कॉलम:

  • ऑटो इंक्रीमेंट टेबल कॉलम
CREATE TABLE address_history (
  address_history_id serial PRIMARY KEY
, person_id int NOT NULL REFERENCES people(id)
, created_at timestamp NOT NULL DEFAULT current_timestamp
, previous_address text
);

विंडो फ़ंक्शन का उपयोग करें row_number() प्रति person_id . में अंतराल के बिना क्रमांक प्राप्त करने के लिए . आप एक VIEW जारी रख सकते हैं कि आप उन नंबरों को तैयार करने के लिए प्रश्नों में अपनी तालिका के लिए ड्रॉप-इन प्रतिस्थापन के रूप में उपयोग कर सकते हैं:

CREATE VIEW address_history_nr AS
SELECT *, row_number() OVER (PARTITION BY person_id
                             ORDER BY address_history_id) AS adr_nr
FROM   address_history;

देखें:

  • गैप-रहित अनुक्रम जहां एकाधिक तालिकाओं के साथ अनेक लेन-देन शामिल हैं

या हो सकता है कि आप ORDER BY . करना चाहें कुछ और। शायद created_at ? बेहतर created_at, address_history_id संभावित संबंधों को तोड़ने के लिए। संबंधित उत्तर:

  • वैकल्पिक धारावाहिकों वाला कॉलम

साथ ही, आप जिस डेटा प्रकार की तलाश कर रहे हैं वह है timestamp या timestamptz , नहीं <स्ट्राइक>datetime पोस्टग्रेज में:

  • रेल और पोस्टग्रेएसक्यूएल में टाइम ज़ोन को पूरी तरह नज़रअंदाज़ करना

और आपको केवल previous_address स्टोर करने की आवश्यकता है (या अधिक विवरण), नहीं <स्ट्राइक> address , न ही <स्ट्राइक>original_address . दोनों एक समझदार डेटा मॉडल में बेमानी होंगे।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PGError:त्रुटि:संबंध के लिए अनुमति अस्वीकृत (हेरोकू का उपयोग करते समय)

  2. पोस्टग्रेज सर्वर से कनेक्ट नहीं हो सका

  3. डेटाबेस से कनेक्ट होने के बाद भूमिका बदलें

  4. Postgresql json क्वेरी की तरह

  5. PosgreSQL txid_current () मान की व्याख्या कैसे करें