プロが教える店舗&オフィスのセキュリティ対策術

PostgreSQLで別データベースのテーブルを参照することはできますか?

仮に以下のデータベースが2つあるとします
CREATE DATABASE common_db ...
CREATE DATABASE app1_db ...

app1_db に接続した状態で common_db のテーブルを参照することはできますか?

仮にcommon_dbに郵便番号テーブル postcodeがあるとします
CREATE TABLE postcode (
postcode text, --郵便番号
pref_name text, -- 県名
 ・・・
)

このpostcodeテーブルをapp1_dbに接続した状態で参照するには、どのような参照クエリになりますか?
ご教授の程よろしくお願います。
そもそもできないのでしょうか?

A 回答 (1件)

PostgreSQL 本体の機能では実現できませんが、contrib モジュールの dblink を使えばできます。



dblink のインストール方法は PostgreSQL のインストール方法によって異なりますが、RPM パッケージであれば postgresql-contrib というパッケージをインストールし、以下のように dblink の関数などを定義します。

psql -f /usr/share/postgresql/contrib/dblink.sql (データベース名)

データベース名には他のデータベースにアクセスしたいデータベース名、例では app1_db を指定します。なお、dblink.sql のパスはパッケージによって異なる場合があります。

dblink をインストールすれば以下のように関数を呼び出して別のデータベース内のテーブルを参照できます。

SELECT * FROM dblink('dbname=common_db', 'SELECT * FROM postcode') AS postcode(postcode text, pref_name text);

dblink について詳しくは PostgreSQL のマニュアルを読んでください。

http://www.postgresql.jp/document/pg840doc/html/ …

ただ、質問の例にあるデータベース名やテーブル名を見ていると、アプリケーションごとに名前空間を分けたいだけのようなので、それであればスキーマを使ったほうがよさそうな気もします。

参考URL:http://www.postgresql.jp/document/pg840doc/html/ …
    • good
    • 0
この回答へのお礼

スキーマ単位でアプリ単位に分けるアドバイスまでいただき
細かなご説明ありがとうございました。

お礼日時:2009/08/19 10:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A