सवाल पोस्टग्रेज़ के साथ क्रॉस-डेटाबेस प्रश्नों को निष्पादित करना संभव है?


मुझे लगता है कि उत्तर नीचे त्रुटि संदेश (और यह Google परिणाम), लेकिन क्या पोस्टग्रेज़ का उपयोग कर क्रॉस-डेटाबेस क्वेरी करने के लिए वैसे भी है?

databaseA=# select * from databaseB.public.someTableName;
ERROR:  cross-database references are not implemented:
 "databaseB.public.someTableName"

मैं कुछ डेटा के साथ काम कर रहा हूं जो दो डेटाबेस में विभाजित है हालांकि डेटा वास्तव में दोनों के बीच साझा किया जाता है (एक डेटाबेस में उपयोगकर्ता आईडी कॉलम से आते हैं users अन्य डेटाबेस में टेबल)। मुझे नहीं पता कि ये स्कीमा के बजाय दो अलग-अलग डेटाबेस क्यों हैं, लेकिन c'est la vie ...


111
2017-09-05 17:09


मूल




जवाब:


नोट: मूल पूछताछ के रूप में, यदि आप एक ही मशीन पर दो डेटाबेस सेट अप कर रहे हैं तो शायद आप दो बनाना चाहते हैं स्कीमा इसके बजाए - उस स्थिति में आपको उनसे पूछताछ करने के लिए विशेष कुछ भी नहीं चाहिए।

9.3 के रूप में अद्यतन करें

अब आप नए का उपयोग कर सकते हैं postgres_fdw (विदेशी डेटा रैपर) किसी भी पोस्टग्रेज़ डेटाबेस में टेबल से कनेक्ट करने के लिए - स्थानीय या दूरस्थ।

ध्यान दें कि वहाँ हैं अन्य लोकप्रिय डेटा स्रोतों के लिए विदेशी डेटा रैपर। इस समय, केवल postgres_fdw तथा file_fdw आधिकारिक पोस्टग्रेर्स वितरण का हिस्सा हैं।

प्री -9.3 के लिए मूल उत्तर

यह कार्यक्षमता डिफ़ॉल्ट PostgreSQL इंस्टॉल का हिस्सा नहीं है, लेकिन आप इसे जोड़ सकते हैं। इसे कहा जाता है dblink

मैंने इसका कभी भी उपयोग नहीं किया है, लेकिन यह बाकी PostgreSQL के साथ बनाए रखा और वितरित किया जाता है। यदि आप PostgreSQL के संस्करण का उपयोग कर रहे हैं जो आपके लिनक्स डिस्ट्रो के साथ आया है, तो आपको postgresql-contrib नामक एक पैकेज स्थापित करने की आवश्यकता हो सकती है।


79
2017-09-05 18:10



स्थापित करने की आवश्यकता है postgresql-contrib से पहले dblink? या postgresql-contrib शामिल dblink? और फिर ओपी की क्वेरी काम करेगी, या आपको इसे अलग से पूछना होगा? - mpen
क्या ऐसे प्रदर्शन मुद्दे हैं जिनके बारे में मुझे चिंता करने की आवश्यकता होगी? - sam yi
जो मैं पढ़ सकता हूं उससे, dblink उस मामले को संभाल नहीं लेता है जहां आप एक क्वेरी चाहते हैं जो दो डेटाबेस प्रसारित करे। - Paul Tomblin


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


18
2017-09-05 17:17



यदि आप एक MySQL वातावरण से आ रहे हैं, तो MySQL कॉल डेटाबेस वास्तव में स्कीमा हैं (SCHEMA बनाएं == MySQL में डेटाबेस बनाएं), इसलिए यदि आप एकाधिक डेटाबेस का उपयोग करके MySQL से कुछ पोर्टिंग करते हैं, तो स्कीमा का उपयोग करें - MkV


dblink () - एक दूरस्थ डेटाबेस में एक क्वेरी निष्पादित करता है

dblink एक क्वेरी निष्पादित करता है (आमतौर पर एक चयन, लेकिन यह कोई एसक्यूएल हो सकता है   बयान जो रिटर्न डेटाबेस में) पंक्तियों को देता है।

जब दो पाठ तर्क दिए जाते हैं, तो पहले व्यक्ति को पहले देखा जाता है   एक सतत कनेक्शन का नाम; अगर पाया जाता है, तो आदेश को निष्पादित किया जाता है   वह कनेक्शन यदि नहीं मिला, तो पहला तर्क एक के रूप में माना जाता है   dblink_connect के लिए कनेक्शन जानकारी स्ट्रिंग, और संकेत दिया   कनेक्शन सिर्फ इस आदेश की अवधि के लिए बनाया जाता है।

एक अच्छा उदाहरण में से एक:

SELECT * 
FROM   table1 tb1 
LEFT   JOIN (
   SELECT *
   FROM   dblink('dbname=db2','SELECT id, code FROM table2')
   AS     tb2(id int, code text);
) AS tb2 ON tb2.column = tb1.column;

नोट: मैं भविष्य में संदर्भ के लिए यह जानकारी दे रहा हूं। refrence


11
2018-05-06 21:10





बस थोड़ा और जानकारी जोड़ने के लिए।

वर्तमान के अलावा किसी अन्य डेटाबेस से पूछताछ करने का कोई तरीका नहीं है। चूंकि PostgreSQL डेटाबेस-विशिष्ट सिस्टम कैटलॉग लोड करता है, इसलिए यह अनिश्चित है कि क्रॉस-डेटाबेस क्वेरी को कैसे व्यवहार करना चाहिए।

contrib / dblink फ़ंक्शन कॉल का उपयोग कर क्रॉस-डेटाबेस क्वेरीज़ की अनुमति देता है। बेशक, एक ग्राहक विभिन्न डेटाबेस के साथ एक साथ कनेक्शन भी कर सकता है और परिणामों को ग्राहक पक्ष में विलय कर सकता है।

PostgreSQL FAQ


9
2017-09-22 05:47



यह additonal जानकारी भ्रामक हो सकता है और उपयोगकर्ताओं को उपरोक्त समाधान का उपयोग करने के लिए हतोत्साहित कर सकते हैं। - johan855


हां, आप डीबीलिंक (केवल पोस्टग्रेस्क्ल) और डीबीआई-लिंक (विदेशी क्रॉस डेटाबेस क्वियरियर्स की अनुमति देता है) और टीडीएस_एलएनकेके का उपयोग करके कर सकते हैं जो एमएस एसक्यूएल सर्वर के खिलाफ क्वेरी चलाने की अनुमति देता है।

मैंने बड़ी सफलता के साथ पहले डीबी-लिंक और टीडीएस-लिंक का उपयोग किया है।


5
2017-09-12 15:56





यदि प्रदर्शन महत्वपूर्ण है और अधिकांश प्रश्न केवल पढ़ने के लिए हैं, तो मैं डेटा को किसी अन्य डेटाबेस पर दोहराने का सुझाव दूंगा। हालांकि यह डेटा के अनियंत्रित नकल की तरह लगता है, यह सूचकांक की आवश्यकता होने पर मदद कर सकता है।

यह सम्मिलित ट्रिगर्स पर सरल के साथ किया जा सकता है जो बदले में दूसरी प्रतिलिपि को अपडेट करने के लिए dblink को कॉल करता है। पूर्ण उड़ा प्रतिकृति विकल्प भी हैं (जैसे स्लोनी) लेकिन यह ऑफ-विषय है।


2