هل يمكنك إجراء استعلامات عبر قواعد البيانات
باستخدام PostgreSQL؟ إليك كيف!
إذا كنت تعمل مع PostgreSQL، قد تتساءل عما إذا كان من الممكن إجراء استعلامات عبر قواعد البيانات
. يحدث هذا عادة عندما تحتاج إلى الوصول أو التلاعب بالبيانات الموزعة عبر قواعد بيانات مختلفة. حالة شائعة هي عندما تتشارك قاعدتان بيانات في البيانات ولكن تم إعدادهما بشكل منفصل—مما يقودنا إلى السؤال: هل يمكنك الاستعلام عن قاعدة بيانات من أخرى في PostgreSQL؟
تحدي الاستعلامات عبر قواعد البيانات
قد تواجه رسالة خطأ مشابهة لهذه عند محاولة تنفيذ استعلام عبر قاعدة بيانات:
databaseA=# select * from databaseB.public.someTableName;
ERROR: cross-database references are not implemented: "databaseB.public.someTableName"
تُشير هذه الرسالة إلى أن PostgreSQL لا يدعم بشكل مباشر المراجع بين قواعد البيانات. لذلك، إذا كانت بياناتك مخزنة في قواعد بيانات منفصلة وتحتاج إلى إجراء استعلامات عبرها، ستحتاج إلى حل بديل.
الحل: استخدام تغليف البيانات الأجنبية
لإجراء استعلامات عبر قواعد البيانات في PostgreSQL، يمكنك الاستفادة من ميزة تغليف البيانات الأجنبية، وخصوصًا postgres_fdw
. يتيح لك ذلك الاتصال بسهولة بالجدول في أي قاعدة بيانات PostgreSQL، سواء كانت محلية أو بعيدة.
إعداد postgres_fdw
-
تثبيت الإضافة: تأكد من تفعيل إضافة
postgres_fdw
في تثبيت PostgreSQL الخاص بك. يمكنك إنشاء الإضافة باستخدام الأمر التالي:CREATE EXTENSION postgres_fdw;
-
تعريف خادم أجنبي: أنشئ خادمًا أجنبيًا يتصل بقاعدة البيانات المستهدفة:
CREATE SERVER foreign_server_name FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host 'host_address', dbname 'databaseB', port '5432');
-
إنشاء خريطة مستخدم: ستحتاج إلى إنشاء خريطة للمستخدم للاتصال بالخادم الأجنبي:
CREATE USER MAPPING FOR local_user SERVER foreign_server_name OPTIONS (user 'remote_user', password 'remote_password');
-
استيراد المخطط الأجنبي: يمكنك استيراد المخطط الأجنبي الذي يحتوي على الجداول التي ترغب في الوصول إليها:
IMPORT FOREIGN SCHEMA public FROM SERVER foreign_server_name INTO local_schema;
-
استعلام عن الجدول البعيد: الآن يمكنك الاستعلام عن الجداول الأجنبية كما لو كانت جداول محلية عادية:
SELECT * FROM local_schema.some_table_name;
للإصدارات الأقدم من PostgreSQL
إذا كنت تستخدم إصدار PostgreSQL قبل 9.3، فإن ميزة تغليف البيانات الأجنبية غير متاحة. ومع ذلك، يمكنك استخدام دالة dblink
، التي تتيح لك الاتصال بقواعد بيانات PostgreSQL الأخرى.
- استخدام
dblink
: ستحتاج إلى تثبيت حزمةpostgresql-contrib
إذا لم تكن جزءًا من التوزيعة لديك بالفعل. ثم يمكنك تنفيذ استعلام مثل هذا:SELECT * FROM dblink('dbname=databaseB user=remote_user password=remote_password', 'SELECT * FROM public.some_table_name') AS t(column1 type1, column2 type2, ...);
ملاحظة: دائمًا ضع في اعتبارك إعادة هيكلة قواعد بياناتك إذا كان ذلك ممكنًا. استخدام
المخططات
ضمن قاعدة بيانات واحدة بدلاً من قواعد بيانات منفصلة يمكن أن يحسن بشكل كبير من إدارة البيانات وسهولة الوصول إليها.
الخاتمة
بينما لا يدعم PostgreSQL بشكل أصلي الاستعلامات عبر قواعد البيانات، فإن استخدام تغليف البيانات الأجنبية مثل postgres_fdw
يوفر حلاً قويًا. من خلال إعداد التكوينات اللازمة، يمكنك الوصول بسلاسة إلى البيانات والتلاعب بها عبر قواعد بيانات مختلفة.
إذا كنت تستخدم إصدارًا أقدم، تذكر أنه بينما يعد dblink
خيارًا، فإن الترقية إلى أحدث إصدارات PostgreSQL يمكن أن تقدم وظائف ودعمًا أفضل.
مع الأدوات والاستراتيجيات الصحيحة، يصبح الوصول إلى البيانات بين قواعد البيانات أسهل من أي وقت مضى. استمتع بالاستعلامات!