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

पोस्टग्रेज पर कॉलम नाम में अज्ञात पंक्ति मान के लिए गतिशील स्थानांतरण

आपके पास "डायनेमिक" पिवट नहीं हो सकता क्योंकि किसी क्वेरी के सभी कॉलमों की संख्या, नाम और डेटा प्रकार डेटाबेस को पहले के बारे में पता होना चाहिए क्वेरी वास्तव में निष्पादित की जाती है (अर्थात पार्स समय पर)।

मुझे JSON में एकत्रित सामग्री को संभालना आसान लगता है।

select customer_number,
       jsonb_object_agg(label, value) as props
from the_table
group by customer_number

अगर आपका फ्रंटएंड सीधे JSON मानों से निपट सकता है, तो आप यहां रुक सकते हैं।

यदि आपको वास्तव में प्रति विशेषता एक कॉलम के साथ एक दृश्य की आवश्यकता है, तो आप उन्हें JSON मान से प्राप्त कर सकते हैं:

select customer_number, 
       props ->> 'address' as address,
       props ->> 'phone' as phone,
       props ->> 'email' as email
from (       
  select customer_number,
         jsonb_object_agg(label, value) as props
  from the_table
  group by customer_number
) t

जब नई विशेषताएँ जोड़ी जाती हैं, तो मुझे इसे प्रबंधित करना थोड़ा आसान लगता है।

यदि आपको सभी लेबल के साथ एक दृश्य की आवश्यकता है, तो आप इसे गतिशील रूप से बनाने के लिए एक संग्रहीत कार्यविधि बना सकते हैं। अगर अलग-अलग लेबल की संख्या बार-बार नहीं बदलती है, तो यह एक समाधान हो सकता है:

create procedure create_customer_view() 
as
$$
declare
  l_sql text;
  l_columns text;
begin
  select string_agg(distinct format('(props ->> %L) as %I', label, label), ', ')
    into l_columns
  from the_table;
  
  l_sql := 
    'create view customer_properties as 
     select customer_number, '||l_columns||' 
     from (
      select customer_number, jsonb_object_agg(label, value) as props
       from the_table 
       group by customer_number 
     ) t';
  execute l_sql;
end;
$$
language plpgsql;

फिर निम्न का उपयोग करके दृश्य बनाएं:

call create_customer_view();  

और अपने कोड में बस उपयोग करें:

select *
from customer_properties;

आप उस प्रक्रिया को नियमित अंतराल में चलाने के लिए शेड्यूल कर सकते हैं (उदाहरण के लिए cron . के माध्यम से Linux पर नौकरी)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Generate_series का उपयोग करके PostgreSQL में गुम तिथियों को कैसे भरें

  2. Postgres . में टाइमस्टैम्प को एक पूर्णांक (यूनिक्स युग) में कैसे परिवर्तित करें

  3. कैसे सत्यापित करें कि pg_dump संग्रह द्वारा निर्मित संग्रह ठीक और मान्य है?

  4. केवल कार्यों को निष्पादित करने के लिए लॉगिन (उपयोगकर्ता) के साथ PostgreSQL 9 भूमिका बनाएं

  5. Postgres तालिका में तालिका विभाजन की गणना करना