जैसा कि हेनरिक ने लिखा था, आप दूरस्थ डेटाबेस को जोड़ने और परिणाम प्राप्त करने के लिए dblink का उपयोग कर सकते हैं। उदाहरण के लिए:
psql dbtest
CREATE TABLE tblB (id serial, time integer);
INSERT INTO tblB (time) VALUES (5000), (2000);
psql postgres
CREATE TABLE tblA (id serial, time integer);
INSERT INTO tblA
SELECT id, time
FROM dblink('dbname=dbtest', 'SELECT id, time FROM tblB')
AS t(id integer, time integer)
WHERE time > 1000;
TABLE tblA;
id | time
----+------
1 | 5000
2 | 2000
(2 rows)
PostgreSQL में रिकॉर्ड छद्म-प्रकार (केवल फ़ंक्शन के तर्क या परिणाम प्रकार के लिए) है, जो आपको किसी अन्य (अज्ञात) तालिका से डेटा क्वेरी करने की अनुमति देता है।
संपादित करें:
आप चाहें तो इसे तैयार स्टेटमेंट के रूप में बना सकते हैं और यह काम भी करता है:
PREPARE migrate_data (integer) AS
INSERT INTO tblA
SELECT id, time
FROM dblink('dbname=dbtest', 'SELECT id, time FROM tblB')
AS t(id integer, time integer)
WHERE time > $1;
EXECUTE migrate_data(1000);
-- DEALLOCATE migrate_data;
संपादित करें (हाँ, दूसरा):
मैंने अभी-अभी आपका संशोधित प्रश्न देखा है (डुप्लिकेट के रूप में बंद है, या इससे बहुत मिलता-जुलता है)।
अगर मेरी समझ सही है (पोस्टग्रेज में tbla है और dbtest में tblb है और आप स्थानीय चयन के साथ दूरस्थ सम्मिलित करना चाहते हैं , नहीं स्थानीय सम्मिलन के साथ दूरस्थ चयन ऊपर के रूप में):
psql dbtest
SELECT dblink_exec
(
'dbname=postgres',
'INSERT INTO tbla
SELECT id, time
FROM dblink
(
''dbname=dbtest'',
''SELECT id, time FROM tblb''
)
AS t(id integer, time integer)
WHERE time > 1000;'
);
मुझे वह नेस्टेड dblink पसंद नहीं है, लेकिन AFAIK मैं dblink_exec बॉडी में tblB का संदर्भ नहीं दे सकता। शीर्ष 20 पंक्तियों को निर्दिष्ट करने के लिए LIMIT का उपयोग करें, लेकिन मुझे लगता है कि आपको पहले ORDER BY क्लॉज का उपयोग करके उन्हें सॉर्ट करना होगा।