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

SQL :2 टेबल से एक पूरा रिकॉर्ड बनाएं

अनुरोध के अनुसार समाधान

इस दुर्भाग्यपूर्ण डिज़ाइन के साथ अटके रहने पर, सबसे तेज़ क्वेरी crosstab() . के साथ होगी , अतिरिक्त मॉड्यूल tablefunc . द्वारा प्रदान किया गया . इस संबंधित उत्तर में पर्याप्त विवरण:

पूछे गए प्रश्न के लिए:

SELECT * FROM crosstab(
      $$SELECT e.id, ef.name, ef.value
       FROM   entry             e
       LEFT   JOIN entry_fields ef
              ON ef.entryid = e.id
             AND ef.name = ANY ('{result,output,code,command}'::text[])
       ORDER  BY 1, 2$$

     ,$$SELECT unnest('{result,output,code,command}'::text[])$$
   ) AS ct (id int, result text, output text, code text, command text);

डेटाबेस डिज़ाइन

यदि आपके पास विशाल . नहीं है विभिन्न क्षेत्रों की संख्या, यह बहुत सरल और अधिक कुशल . होगा तीनों टेबल को एक साधारण टेबल में मर्ज करने के लिए:

CREATE TABLE entry (
   entry_id serial PRIMARY KEY
  ,field1   text
  ,field2   text
  , ... more fields
);

बिना मान वाले फ़ील्ड NULL हो सकते हैं . NULL संग्रहण बहुत सस्ता है (मूल रूप से NULL बिटमैप में प्रति कॉलम 1 बिट):

यहां तक ​​​​कि अगर आपके पास सैकड़ों अलग-अलग कॉलम हैं, और प्रति प्रविष्टि केवल कुछ ही भरे हुए हैं, तब भी यह बहुत कम डिस्क स्थान का उपयोग करेगा।

आपकी क्वेरी तुच्छ हो जाती है:

SELECT entry_id, result, output, code, command
FROM   enty;

यदि आपके पास बहुत अधिक स्तंभ हैं, और यह केवल एक पथभ्रष्ट डिज़ाइन नहीं है (अक्सर, इसे बहुत कम स्तंभों में मोड़ा जा सकता है), तो डेटा प्रकारों पर विचार करें hstore या json / jsonb (पोस्टग्रेज 9.4 में) EAV के लिए भंडारण।

प्रति पोस्टग्रेज "अबाउट" पेज :

Maximum Columns per Table   250 - 1600 depending on column types

विकल्पों के साथ इस संबंधित उत्तर पर विचार करें:

और dba.SE पर ईएवी संरचनाओं के विशिष्ट उपयोग के मामलों/समस्याओं के बारे में यह प्रश्न:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL सर्वर को चलाए बिना PostgreSQL डेटाबेस को इनिशियलाइज़ कैसे करें

  2. PostgreSQL प्रदर्शन - चुनें बनाम संग्रहीत कार्य

  3. django ORM का उपयोग करके आप विदेशी कुंजी फ़ील्ड पर दो तालिकाओं में कैसे शामिल होते हैं?

  4. एकल होस्ट पर एकाधिक PostgreSQL इंस्टेंस चलाना

  5. SSL SYSCALL त्रुटि पोस्टग्रेज करता है:EOF का पता अजगर और psycopg के साथ लगाया जाता है