外部データベース連携を下記で以前テストしましたが、今回はDBLinkを試してみました。
参考)https://oha-yo.com/postgresql/dblink/
Oracleでは何度かつかったことがあったのですが、Postgresではありませんでした。最近必要に感じるケースに遭遇したため実際に動かすことにしました。
環境は2ノードともLinuxでパッケージマネージャでインストールしたPostgresを使います。
192.168.1.124(n0c):アクセス元
192.168.1.168(n0d)
特別なライブラリを外部からもってくるのではなく、postgresql-contribに含まれるため、これがインストールされていえば、下記コマンドで使用できるようになります。(アクセス元のみ)
postgres=# create extension dblink;
CREATE EXTENSION
アクセス先
/etc/postgresql/14/main/pg_hba.conf
host all all 192.168.1.124/32 scram-sha-256
/etc/postgresql/14/main/postgresql.conf
listen_addresses = ‘*’ # what IP address(es) to listen on;
3つの方法でテーブル内容を取得
1)select1文にアクセス情報を記述して取得
2)db_coneect()でセッションを確立して取得
3)Viewを利用した取得(セッション利用)
SQL
1 2 3 4 5 6 7 8 |
select * from dblink('host=192.168.1.168 dbname=postgres user=postgres password=password','select * from test_tbl') as (id int, update timestamp); select dblink_connect('dblink01','host=192.168.1.168 dbname=postgres password=password'); select * from dblink('dblink01','select * from test_tbl') as (id int, update timestamp); create or replace view v_test_tbl as select * from dblink('dblink01','select * from test_tbl') as (id int, update timestamp); select * from v_test_tbl; select dblink_disconnect('dblink01'); |
dblink_connectのセッションが確立されていないときにselectするとエラー。