sql >> データベース >  >> RDS >> PostgreSQL

複数のPostgresqlデータベース間でテーブルを共有する方法

    はい、スキーマが解決策です。単一のデータベースで、単一のPostgreSQLクラスターを使用します。

    すべてのアプリユーザーのグループを作成します:

    CREATE ROLE app;
    

    すべてのグローバル共有アプリケーションテーブルが存在するグローバル「アプリ」スキーマを作成します。

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

    デプロイメントごとに個別のユーザー(スーパーユーザー権限なし)を作成します:

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

    オプションで、IN ROLE appの代わりに 、選択したアプリオブジェクトに対するこれらのユーザーに明示的な権限を付与できます:

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

    デプロイメントに依存するテーブルが存在するプライベートスキーマを作成します:

    CREATE SCHEMA AUTHORIZATION app01; 
    CREATE SCHEMA AUTHORIZATION app02;
    

    これで、デプロイされたすべてのアプリケーションのプライベートスキーマができました。しかし同時に、グローバルデータへのアクセスを共有しています。

    すばらしいのは、アプリケーションがスキーマ対応である必要がないことです。 SELECT * FROM froobles デフォルトでは、SELECT * FROM app01.frooblesに解決されます 、app01として接続している場合 ユーザー。スキーマ名を指定する必要はありません。

    追加の手段として、テーブル継承を使用して、デプロイメントごとにグローバルオブジェクトを拡張できます。

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


    1. EXISTSとINを使用したサブクエリ-MySQL

    2. 複数の列にインデックスを作成する方法

    3. SQLPLUS forOracle10.2で列/フィールドを検索するための検索コマンド

    4. CSVファイルをMySQLテーブルにインポートするにはどうすればよいですか?