sql >> Database >  >> RDS >> PostgreSQL

Een tabel delen tussen meerdere Postgresql-databases

Ja, schema's zijn de oplossing. Gebruik één PostgreSQL-cluster, met één database.

Maak een groep voor alle app-gebruikers:

CREATE ROLE app;

Maak een globaal "app"-schema, waarin alle globale tabellen met gedeelde toepassingen zullen leven.

CREATE SCHEMA AUTHORIZATION app;
CREATE TABLE app.objects ( objectid int PRIMARY KEY );
ALTER TABLE app.objects OWNER TO app;

Maak een aparte gebruiker (zonder superuser-rechten) voor elk van de implementaties:

CREATE USER app01 IN ROLE app;
CREATE USER app02 IN ROLE app;

Optioneel, in plaats van IN ROLE app , kunt u deze gebruikers expliciete rechten verlenen op geselecteerde app-objecten:

GRANT USAGE ON SCHEMA app TO app01;
GRANT SELECT on app.objects TO app01;

Maak privéschema's waarin implementatie-afhankelijke tabellen zullen leven:

CREATE SCHEMA AUTHORIZATION app01; 
CREATE SCHEMA AUTHORIZATION app02;

Nu heb je een privéschema voor elke geïmplementeerde applicatie; maar tegelijkertijd heb je gedeelde toegang tot wereldwijde gegevens.

Wat leuk is, is dat de applicatie niet schema-bewust hoeft te zijn. SELECT * FROM froobles wordt standaard opgelost in SELECT * FROM app01.froobles , als je bent verbonden als app01 gebruiker. U hoeft geen schemanaam op te geven.

Als extra maatregel kunt u tabelovererving gebruiken om globale objecten per implementatie uit te breiden:

CREATE TABLE app01.objects (
  localattr1 int,
  localattr2 text
)
INHERITS ( app.objects );


  1. De Pearson-correlatiecoëfficiëntformule in SQL

  2. Moet ik EAV-waarden in een datatypetabel plaatsen?

  3. Interfacefout (0, '')

  4. Hoe krijg ik een willekeurige standaardwaarde voor een kolom in MySQL/Rails