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

एकाधिक Postgresql डेटाबेस के बीच एक तालिका कैसे साझा करें

हां, स्कीमा समाधान हैं। एकल डेटाबेस के साथ एकल 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 );


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mac पर Odoo इंस्टालेशन LESSC कमांड निष्पादित नहीं कर सका

  2. PostgreSQL का \dt केवल सार्वजनिक स्कीमा टेबल क्यों दिखाता है?

  3. PostgreSQL के लिए डेटा स्टोर की तुलना करना - MVCC बनाम InnoDB

  4. स्थानीय समय को UTC में कैसे बदलें?

  5. Postgresql एक्सटेंशन बनाने में विफल रहता है