sql >> Database teknologi >  >> RDS >> PostgreSQL

Sådan deler du en tabel mellem flere Postgresql-databaser

Ja, skemaer er løsningen. Brug en enkelt PostgreSQL-klynge med en enkelt database.

Opret en gruppe for alle app-brugere:

CREATE ROLE app;

Opret et globalt "app"-skema, hvor alle globale delte applikationstabeller vises.

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

Opret separat bruger (uden superbrugerrettigheder) for hver af implementeringerne:

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

Eventuelt i stedet for IN ROLE app , kan du give eksplicitte rettigheder til disse brugere på udvalgte app-objekter:

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

Opret private skemaer, hvor implementeringsafhængige tabeller vil leve:

CREATE SCHEMA AUTHORIZATION app01; 
CREATE SCHEMA AUTHORIZATION app02;

Nu har du et privat skema for hver applikation, der er implementeret; men samtidig har du delt adgang til globale data.

Hvad er rart, er, at applikationen ikke behøver at være skema-bevidst. SELECT * FROM froobles vil som standard løses til SELECT * FROM app01.froobles , hvis du er tilsluttet som app01 bruger. Du behøver ikke at angive skemanavn.

Som en ekstra foranstaltning kan du bruge tabelnedarvning til at udvide globale objekter på basis af implementering:

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


  1. mysql-fejl 2005 - Ukendt MySQL-servervært 'localhost'(11001)

  2. Mysql-forespørgsel GRUPPER efter og BESTIL efter

  3. Konvertering af Oracle SQL Select til PostgreSQL select

  4. DbCommand og parameteriseret SQL, ORACLE vs SQL Server