LoginSignup
3
1

【PostgreSQL】postgres_fdwを使ってみよう

Last updated at Posted at 2023-12-06

fdwについて

fdwとはForeign Data Wrapperの略
外部にあるデータにアクセスできるようにするための拡張機能
他にもOracleに対して同様のことができるoracle_fdwなどもある。

postgres_fdw_流れ.png

postgres_fdwの使用手順

postgres_fdw.drawio.png

① CREATE EXTENSION
postgres_fdwをインストールする。

CREATE EXTENSION postgres_fdw;

インストールの確認
installed_versionにバージョン番号があればインストール完了

SELECT * FROM pg_available_extensions WHERE name IN ('postgres_fdw');
     name     | default_version | installed_version |                      comment                       
--------------+-----------------+-------------------+----------------------------------------------------
 postgres_fdw | 1.0             | 1.0               | foreign-data wrapper for remote PostgreSQL servers
(1 row)

② CREATE SERVER
接続する外部サーバーへの接続情報と利用するfdwを定義

CREATE SERVER [サーバー名] FOREIGN DATA WRAPPER postgres_fdw;

③ CREATE USER MAPPING
リモートテーブルには、権限を持つユーザー名でアクセスする。
MAPPINGで外部サーバーとローカルのユーザーを紐づける。

CREATE USER MAPPING FOR [ユーザー名] SERVER [サーバー名]

④ CREATE FOREING TABLE または IMPORT FOREIGN SCHEMA
外部テーブルを定義する。
リモートテーブルと同じ定義をしておく

  • CREATE FOREING TABLEの場合
CREATE FOREIGN TABLE table_name (
  id                     BIGINT,
  name                   VARCHAR(40)  NOT NULL,
  ~~~
) SERVER server_name
OPTIONS (table_name 'remote_tbl_name');

注意点

外部の統計情報が使われない

デフォルトでは外部テーブルの統計情報を利用しないため、もし利用したい場合はuse_remote_estimatetrueにしておくことでpostgres_fdwがリモートのEXPLAINコマンドを発行します。

外部の拡張機能が使われない

外部テーブルを参照する際に、デフォルトでは外部テーブルで利用されている拡張機能が使用されない。
利用する場合は以下のようにextensionsの指定をする。

CREATE SERVER [サーバー名] FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (
  ~~~,
    extensions '利用したい拡張機能名'
);

参考

PosgreSQLのFDWを使ってデータベース間で透過的にクエリする
外部データとの連携 ~FDWで様々なデータソースとつなぐ~

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1