हां, स्कीमा समाधान हैं। एकल डेटाबेस के साथ एकल PostgreSQL क्लस्टर का उपयोग करें।
सभी ऐप उपयोगकर्ताओं के लिए एक समूह बनाएं:
CREATE ROLE app;
वैश्विक "एप्लिकेशन" स्कीमा बनाएं, जहां सभी वैश्विक साझा एप्लिकेशन टेबल रहेंगे।
CREATE SCHEMA AUTHORIZATION app;
CREATE TABLE app.objects ( objectid int PRIMARY KEY );
ALTER TABLE app.objects OWNER TO app;
प्रत्येक परिनियोजन के लिए अलग उपयोगकर्ता (बिना सुपरयूज़र अधिकारों के) बनाएँ:
CREATE USER app01 IN ROLE app;
CREATE USER app02 IN ROLE app;
वैकल्पिक रूप से, IN ROLE app
, आप इन उपयोगकर्ताओं को चयनित ऐप ऑब्जेक्ट पर स्पष्ट अधिकार प्रदान कर सकते हैं:
GRANT USAGE ON SCHEMA app TO app01;
GRANT SELECT on app.objects TO app01;
निजी स्कीमा बनाएं, जहां परिनियोजन-निर्भर टेबल रहेंगे:
CREATE SCHEMA AUTHORIZATION app01;
CREATE SCHEMA AUTHORIZATION app02;
अब आपके पास परिनियोजित प्रत्येक एप्लिकेशन के लिए एक निजी स्कीमा है; लेकिन साथ ही आपने वैश्विक डेटा तक पहुंच साझा की है।
क्या अच्छा है, यह है कि एप्लिकेशन को स्कीमा-जागरूक होने की आवश्यकता नहीं है। SELECT * FROM froobles
डिफ़ॉल्ट रूप से SELECT * FROM app01.froobles
. का समाधान करेगा , अगर आप app01
. के रूप में जुड़े हुए हैं उपयोगकर्ता। आपको स्कीमा नाम निर्दिष्ट करने की आवश्यकता नहीं है।
एक अतिरिक्त उपाय के रूप में, आप प्रति-तैनाती के आधार पर वैश्विक वस्तुओं का विस्तार करने के लिए तालिका वंशानुक्रम का उपयोग कर सकते हैं:
CREATE TABLE app01.objects (
localattr1 int,
localattr2 text
)
INHERITS ( app.objects );