sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man delar en tabell mellan flera Postgresql-databaser

Ja, scheman är lösningen. Använd ett enda PostgreSQL-kluster, med en enda databas.

Skapa en grupp för alla appanvändare:

CREATE ROLE app;

Skapa ett globalt "app"-schema, där alla globala delade applikationstabeller kommer att visas.

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

Skapa separata användare (utan superanvändarrättigheter) för var och en av distributionerna:

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

Alternativt, istället för IN ROLE app , kan du ge uttryckliga rättigheter för dessa användare på utvalda appobjekt:

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

Skapa privata scheman, där distributionsberoende tabeller kommer att leva:

CREATE SCHEMA AUTHORIZATION app01; 
CREATE SCHEMA AUTHORIZATION app02;

Nu har du ett privat schema för varje applikation som distribueras; men samtidigt har du delad tillgång till global data.

Vad som är trevligt är att applikationen inte behöver vara schemamedveten. SELECT * FROM froobles kommer som standard att lösas till SELECT * FROM app01.froobles , om du är ansluten som app01 användare. Du behöver inte ange schemanamn.

Som en extra åtgärd kan du använda tabellärvning för att utöka globala objekt per distribution:

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


  1. Ordna efter inom gruppen efter i Doktrin 2

  2. Förstå dödlägen i MySQL och PostgreSQL

  3. Lagra bild till databas blob; hämta från db till Picturebox

  4. Hur man skapar en if-sats inuti echo i PHP MySQLi