PostgreSQLでdblinkを使用して、異なるデータベースのテーブルを結合する

JavaScript

PostgreSQLで、異なるデータベースのテーブルを結合したい場合、dblinkを使用すると便利です。
dblinkを使用するための準備と、使用方法について説明します。


環境

  • OS:Ubuntu Server 22.04.2 LTS
  • PostgreSQL15.5

dblinkの準備

dblinkを使用するためには、PostgreSQLのエクステンションをインストールしておく必要があります。

postgres=# create extension dblink;
postgres=# \dx
                                    インストール済みの拡張一覧
  名前   | バージョン |  スキーマ  |                             説明
---------+------------+------------+--------------------------------------------------------------
 dblink  | 1.2        | public     | connect to other PostgreSQL databases from within a database
 plpgsql | 1.0        | pg_catalog | PL/pgSQL procedural language
(2 行)

dblinkを使用

dblinkを使用するために参照するためのテーブルは、あらかじめviewとして準備しておくと便利です。

// 「DBLINK-SAMPLE」という名称でビューを作成しておく
create or replace view link_view_sample as
select
    col1
    , col2 
    , col3
from
    dblink(
        'DBLINK-SAMPLE'
        ,'select
            col1
            , col2
            , col3
        from
            other_server_table otTble
            left outer join my_server_table myTble on otTble.col1 = myTble.kojin_col1
        ) AS t(
            col1 int
            , col2 int
            , col3 int
    );

作成したビューを使用するためには、リンク先サーバと接続→SQLを実行→リンク先サーバとの接続解除、の流れになります。


// リンク先サーバと接続
select
    dblink_connect( 
        'DBLINK-SAMPLE'
        , 'host=X.X.X.X dbname=database user=saku password=saku00'
    );

// ビューを参照
select
    col1
    , col2
    , col3 
from
    link_view_sample;

// リンク先サーバとの接続解除
select dblink_disconnect('DBLINK-SAMPLE');