PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Cách chia sẻ bảng giữa nhiều cơ sở dữ liệu Postgresql

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sao chép cấu trúc bảng vào bảng mới

  2. Cảnh báo gây phiền nhiễu cho con rối và Postgres:Phiên bản chuyển sang máy chủ postgresql ::không được dùng nữa

  3. Xoay vòng trên nhiều cột bằng cách sử dụng Tablefunc

  4. Tôi có nên ngắt kết nối () nếu tôi đang sử dụng Connect_cached () của Apache ::DBI?

  5. Trả về các hàng có tối đa một cột trong Postgresql