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

varchar के लिए array_agg () का उपयोग कैसे करें []

मानक समग्र कार्य array_agg() केवल आधार प्रकारों के लिए काम करता है, इनपुट के रूप में सरणी प्रकारों के लिए नहीं। (लेकिन पोस्टग्रेज 9.5+ array_agg() . का एक नया संस्करण है वह कर सकता है!)

आप कस्टम एग्रीगेट फ़ंक्शन का उपयोग कर सकते हैं array_agg_mult() जैसा कि इस संबंधित उत्तर में परिभाषित किया गया है:
डेटा को पोस्टग्रेज़ सरणी में चुनना

इसे प्रति डेटाबेस एक बार बनाएं। तब आपकी क्वेरी इस तरह काम कर सकती है:

SELECT use.user_sched_id, array_agg(se.sched_entry_id) AS seids
      ,array_agg_mult(ARRAY[se.min_crew]) AS min_crew_arr
FROM   base.sched_entry se
LEFT   JOIN base.user_sched_entry use USING (sched_entry_id)
WHERE  se.sched_entry_id = ANY(ARRAY[623, 625])
GROUP  BY user_sched_id;

लिंक किए गए उत्तर में एक विस्तृत तर्क है।

विस्तार का मिलान होना चाहिए

आपकी टिप्पणी के जवाब में, सरणी प्रकारों पर मैनुअल से इस उद्धरण पर विचार करें:

<ब्लॉकक्वॉट>

बहुआयामी सरणियों में प्रत्येक आयाम के लिए मिलान विस्तार होना चाहिए। एक बेमेल एक त्रुटि का कारण बनता है।

इसके आसपास कोई रास्ता नहीं है, सरणी प्रकार पोस्टग्रेज़ में इस तरह के बेमेल की अनुमति नहीं देता है। आप कर सकते थे अपने सरणियों को NULL मानों के साथ पैड करें ताकि सभी आयामों का मिलान विस्तार हो।

लेकिन मैं array_to_string() के साथ सरणियों को अल्पविराम से अलग की गई सूचियों में अनुवाद करना चाहूंगा इस क्वेरी के प्रयोजन के लिए और string_agg() . का उपयोग करें text को एकत्रित करने के लिए - अधिमानतः एक अलग विभाजक के साथ। मेरे उदाहरण में एक नई पंक्ति का उपयोग करना:

SELECT use.user_sched_id, array_agg(se.sched_entry_id) AS seids
      ,string_agg(array_to_string(se.min_crew, ','), E'\n') AS min_crews
FROM   ...

सामान्य करें

शुरू करने के लिए आप अपनी स्कीमा को सामान्य बनाने पर विचार कर सकते हैं। आम तौर पर, आप इस उदाहरण में उल्लिखित एक अलग तालिका के साथ ऐसे n:m संबंध लागू करेंगे:
PostgreSQL में कई-से-अनेक संबंध कैसे कार्यान्वित करें?




  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:Mac OS X का उपयोग करके pg_hba.conf फ़ाइल कैसे खोजें?

  2. सीरियल प्राथमिक कुंजी कॉलम का उपयोग करके सुरक्षित रूप से तालिकाओं का नाम बदलें

  3. PostgreSQL डेटाबेस का बैकअप और पुनर्स्थापना कैसे करें

  4. Postgres 9.4 . में JSONB प्रकार के कॉलम पर अद्यतन संचालन कैसे करें

  5. पोस्टग्रेएसक्यूएल विवरण तालिका