Có, lược đồ là giải pháp. Sử dụng một cụm PostgreSQL duy nhất, với một cơ sở dữ liệu duy nhất.
Tạo một nhóm cho tất cả người dùng ứng dụng:
CREATE ROLE app;
Tạo lược đồ "ứng dụng" toàn cầu, nơi tất cả các bảng ứng dụng được chia sẻ toàn cầu sẽ hoạt động.
CREATE SCHEMA AUTHORIZATION app;
CREATE TABLE app.objects ( objectid int PRIMARY KEY );
ALTER TABLE app.objects OWNER TO app;
Tạo người dùng riêng biệt (không có quyền siêu người dùng) cho từng triển khai:
CREATE USER app01 IN ROLE app;
CREATE USER app02 IN ROLE app;
Theo tùy chọn, thay vì ứng dụng IN ROLE app
, bạn có thể cấp quyền rõ ràng cho những người dùng này trên các đối tượng ứng dụng đã chọn:
GRANT USAGE ON SCHEMA app TO app01;
GRANT SELECT on app.objects TO app01;
Tạo lược đồ riêng tư, nơi các bảng phụ thuộc vào triển khai sẽ hoạt động:
CREATE SCHEMA AUTHORIZATION app01;
CREATE SCHEMA AUTHORIZATION app02;
Bây giờ bạn có một lược đồ riêng cho mọi ứng dụng được triển khai; nhưng đồng thời bạn có quyền truy cập chung vào dữ liệu toàn cầu.
Điều tuyệt vời là ứng dụng đó không cần phải nhận biết lược đồ. SELECT * FROM froobles
theo mặc định sẽ giải quyết thành SELECT * FROM app01.froobles
, nếu bạn được kết nối bằng app01
người sử dụng. Bạn không phải chỉ định tên lược đồ.
Như một biện pháp bổ sung, bạn có thể sử dụng kế thừa bảng để mở rộng các đối tượng toàn cục trên cơ sở mỗi lần triển khai:
CREATE TABLE app01.objects (
localattr1 int,
localattr2 text
)
INHERITS ( app.objects );