PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Cara berbagi tabel antara beberapa database Postgresql

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 );


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menggunakan meteor dengan postgresql

  2. Penguncian predikat di PostgreSQL 9.2.1 dengan isolasi Serializable

  3. Kueri dinamis dalam fungsi pemicu di PostgreSQL

  4. AWS RDS Postgresql Pgadmin - Server tidak mendengarkan

  5. Cara membagi array menjadi baris di Postgresql