sql >> Databáze >  >> RDS >> PostgreSQL

Jak sdílet tabulku mezi více databázemi Postgresql

Ano, schémata jsou řešením. Použijte jeden cluster PostgreSQL s jednou databází.

Vytvořte skupinu pro všechny uživatele aplikace:

CREATE ROLE app;

Vytvořte globální schéma „app“, kde budou fungovat všechny globální tabulky sdílených aplikací.

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

Vytvořte samostatného uživatele (bez práv superuživatele) pro každé z nasazení:

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

Volitelně místo IN ROLE app , můžete těmto uživatelům udělit explicitní práva na vybrané objekty aplikace:

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

Vytvořte soukromá schémata, kde budou fungovat tabulky závislé na nasazení:

CREATE SCHEMA AUTHORIZATION app01; 
CREATE SCHEMA AUTHORIZATION app02;

Nyní máte soukromé schéma pro každou nasazenou aplikaci; ale zároveň máte sdílený přístup ke globálním datům.

Co je hezké, je, že aplikace nemusí znát schéma. SELECT * FROM froobles se ve výchozím nastavení převede na SELECT * FROM app01.froobles , pokud jste připojeni jako app01 uživatel. Nemusíte zadávat název schématu.

Jako další opatření můžete použít dědičnost tabulky k rozšíření globálních objektů na základě jednotlivých nasazení:

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


  1. Funkce MySQL ATAN() – vrátí arc tangens hodnoty (nebo hodnot)

  2. Vrátí nečíselné hodnoty ze sloupce databáze PostgreSQL

  3. Jak zrušit tabulky a sloupce pomocí SQL

  4. Operátor ALL VS Any na prázdný dotaz