Ya, skema adalah solusinya. Gunakan satu cluster PostgreSQL, dengan satu database.
Buat grup untuk semua pengguna aplikasi:
CREATE ROLE app;
Buat skema "aplikasi" global, tempat semua tabel aplikasi bersama global akan ditampilkan.
CREATE SCHEMA AUTHORIZATION app;
CREATE TABLE app.objects ( objectid int PRIMARY KEY );
ALTER TABLE app.objects OWNER TO app;
Buat pengguna terpisah (tanpa hak pengguna super) untuk setiap penerapan:
CREATE USER app01 IN ROLE app;
CREATE USER app02 IN ROLE app;
Secara opsional, alih-alih IN ROLE app
, Anda dapat memberikan hak eksplisit kepada pengguna ini pada objek aplikasi yang dipilih:
GRANT USAGE ON SCHEMA app TO app01;
GRANT SELECT on app.objects TO app01;
Buat skema pribadi, tempat tabel yang bergantung pada penerapan akan ditampilkan:
CREATE SCHEMA AUTHORIZATION app01;
CREATE SCHEMA AUTHORIZATION app02;
Sekarang Anda memiliki skema pribadi untuk setiap aplikasi yang diterapkan; tetapi pada saat yang sama Anda telah berbagi akses ke data global.
Apa yang bagus, adalah bahwa aplikasi tidak harus sadar skema. SELECT * FROM froobles
secara default akan memutuskan ke SELECT * FROM app01.froobles
, jika Anda terhubung sebagai app01
pengguna. Anda tidak perlu menentukan nama skema.
Sebagai tindakan ekstra, Anda dapat menggunakan pewarisan tabel untuk memperluas objek global berdasarkan per penerapan:
CREATE TABLE app01.objects (
localattr1 int,
localattr2 text
)
INHERITS ( app.objects );