PostgreSQL Flexible Server同一ノード上のデータベースに対してdblinkを構成する

このエントリは2022/12/28現在の情報に基づいています。将来の機能追加や変更に伴い、記載内容との乖離が発生する可能性があります。

何を調べようとしているか?

Azure Database for PostgreSQL Flexible Serverの同一ノード上の別データベースをPostgreSQLのdblinkを使ってクエリする場合、ホスト名はlocalhostでよいのか、Flexible ServerのFQDNを使うべきなのか

データベース間の関係が密になるためあまり好ましくないのだが、機能確認することにした。dblinkについては以下を参照。

dblink
https://www.postgresql.org/docs/current/contrib-dblink-function.html

FQDNを指定したTCP接続でアクセスできるのは当然だが、localhostを使ったローカルソケットでの接続が可能なのか確認する。

準備

まずは、Flexible Serverで拡張機能を有効にする。手順は以下のドキュメントにある。

Azure Database for PostgreSQL – フレキシブル サーバーの PostgreSQL 拡張機能 / PostgreSQL extensions in Azure Database for PostgreSQL – Flexible Server
https://learn.microsoft.com/azure/postgresql/flexible-server/concepts-extensions

この記事では、事前に作成されているpostgresと、新規作成したdb1というデータベースを使う。拡張機能をノードに対してデプロイしたら、呼び出し元のデータベースで拡張を作成しておく。今回は別の検証で使うために両方から呼び出せるよう、両データベースに対して実行している。

db1=> create extension dblink;
CREATE EXTENSION
postgres=> create extension dblink;
CREATE EXTENSION

db1というデータベースでは、簡単な表を作成しておく。

db1=> select * from tbl1;
 id | name
----+-------
  1 | Test1
  2 | Test2
(2 rows)

postgresにも簡単な表を作成しておく。

postgres=> select * from tbl2;
 id | comments
----+-----------
  1 | こめんと1
  2 | こめんと2
(2 rows)

テスト

事前に作成されているpostgresというデータベースから試す。FQDNでの接続は当然ながらできる(というか、できないと困る)。

postgres=> select
  t1.id, t1.name, tbl2.comments
from
  dblink('host=FQDN port=5432 dbname=db1 user=db1_user password=db1_password')
    as t1(id integer, name varchar(10)),
  tbl2
where
  tbl2.id = t1.id;
 id | name  | comments
----+-------+-----------
  1 | Test1 | こめんと1
  2 | Test2 | こめんと2
(2 rows)

で、localhostでも試す。

postgres=> select
  t1.id, t1.name, tbl2.comments
from
  dblink('host=localhost port=5432 dbname=db1 user=db1_user password=db1_password')
    as t1(id integer, name varchar(10)),
  tbl2
where
  tbl2.id = t1.id;
 id | name  | comments
----+-------+-----------
  1 | Test1 | こめんと1
  2 | Test2 | こめんと2
(2 rows)

想定通り両方法で可能だった。何れの方法もサポートはされるので、localhostではだめ、ということはない。

じゃあどちらを選ぶ?

FQDNでなければならない、ということはないようなので、お好みで何れかを使うことで問題なさそう。個人的にはlocalhostを使いそう。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中