postgres_fdwおよびdblink拡張を使用したPostgreSQLOCI Database with PostgreSQLを使用したOCI Databaseでのデータベース間アクセスの有効化
はじめに
Oracle Cloud Infrastructure Database with PostgreSQL (OCI Database with PostgreSQL)は、postgres_fdwやdblinkなどの拡張機能を使用したデータベース間接続をサポートしています。これらの拡張により、PostgreSQLデータベース間のシームレスなアクセスおよびデータ共有が可能になり、分析、フェデレーテッド問合せまたはレガシー統合シナリオに役立ちます。
dblinkとは?
DBlinkは、リモートのPostgreSQLデータベースでSQL文を直接実行できるPostgreSQL拡張機能です。結果セットを行として返すか、リモート・サーバーでコマンドを実行します。
postgres_fdwとは何ですか。
postgres_fdw (外部データ・ラッパー)は、データベースがリモートPostgreSQLサーバーの表に接続し、ローカル表であるかのように問合せできるようにするPostgreSQL拡張機能です。dblinkとは異なり、リモート表をローカル・オブジェクトとしてマップし、より手続き的な制御を提供します。
このチュートリアルでは、OCI Database with PostgreSQLインスタンスでのpostgres_fdwおよびdblink拡張の設定と、それぞれの例について説明します。
目的
To enable secure and reliable network communication between two OCI Database with PostgreSQL database systems located in different Virtual Cloud Networks (VCNs) and different regions.この設定により、データベース接続がVCNの境界を越えてシームレスに動作するようになります。これには、プライベート・ビューを使用したDNS解決のルーティングおよび設定のためのローカル・ピアリング・ゲートウェイ(LPG)の構成が含まれます。目標は、postgres_fdwやdblinkなどのデータベース拡張に対するVCN/リージョン間の接続をサポートすることです。
前提条件
- To create and manage the postgres_fdw or dblink extensions in an OCI Database with PostgreSQL database, the user must have:
- データベース・アクセス権限。
- ユーザーに付与されるOCI_ADMIN_ROLE。
- OCI Database with PostgreSQLデータベース・システム(ソースおよびターゲット)には、ネットワーク接続が必要です。
Task 1: Enable the postgres_fdw and dblink Extension in OCI Database with PostgreSQL
-
OCIコンソールからの拡張機能の有効化。
-
dblink拡張子または postgres_fdw拡張子のいずれかに対して有効にする構成ファイルを作成します。
-
構成をデータベース・システムに適用します。
-
-
データベース・レベルでの拡張の有効化。
OCIコンソールで拡張を有効にした後、データベースに接続し、次のSQLコマンドを実行します。
CREATE EXTENSION postgres_fdw; CREATE EXTENSION dblink;
タスク2: 異なるVCNs内のデータベース・システム間のネットワーク接続の構成
異なるVCNsにある2つのOCI Database with PostgreSQLデータベース・システム間の通信を有効にするには、次のステップに従います。
-
ローカル・ピアリング・ゲートウェイ(LPG)の作成。
各VCNにLPGを作成して、それらの間のピアリング接続を確立します。
-
ルート表の構成。
-
VCNごとに、LPGに関連付けられたルート表を更新して、ルート・ルールを含めます。
-
宛先CIDRブロックを他のターゲットVCNのアドレス範囲に設定し、対応するLPGとしてネクスト・ホップを指定します。
-
-
プライベート・ビューを使用したDNS解決の設定。
-
OCIコンソールに移動し、プライベート・ビューを検索して、両方のVCNsのDNS構成にアクセスします。
-
各VCNのプライベート・ビューを開き、ゾーン・エントリを作成します。
-
-
各データベース・システムのゾーン・レコードの作成。
各VCNのプライベート・ビューで、他のVCNのデータベース・システムの完全修飾ドメイン名(FQDN)を表すゾーンを追加します。
-
DNSレコードの追加。
-
新しいゾーン・エントリの横にある3つのドット・アイコンをクリックするか、「FQDN」リンクをクリックします。
-
「レコードの管理」を選択し、「レコードの追加」をクリックします。
-
「タイプA (IPv4アドレス)」を選択し、「TTL」を「500」に設定し、反対側のVCNでターゲット・データベース・システムのプライマリ・エンドポイントIPアドレスを入力します。
-
「レコードの追加」をクリックし、「変更の公開」をクリックします。
-
タスク3: 様々なVCNsおよび異なるリージョンのデータベース・システム間のネットワーク接続の構成
To enable communication between two OCI Database with PostgreSQL database systems located in different VCNs and different regions.
-
Dynamic Routing Gateways (DRG)の作成。
各リージョンにDRGを作成し、それぞれのVCNにアタッチします。
-
ルート表の構成。
-
VCNごとに、DRGに関連付けられたルート表を更新します。
-
他のVCNの宛先CIDRブロックを含むルート・ルールを追加し、アタッチされたDRGとしてネクスト・ホップを指定します。
-
-
プライベート・ビューを使用したDNS解決の設定。
-
OCIコンソールに移動し、プライベート・ビューを検索して、各VCNのDNS設定にアクセスします。
-
各VCNのプライベート・ビューを開き、ゾーン・エントリを作成します。
-
-
各データベース・システムのゾーン・レコードの作成。
各VCNのプライベート・ビューで、他のVCNのデータベース・システムのFQDNを表すゾーンを追加します。
-
DNSレコードの追加。
-
新しいゾーン・エントリの横にある3つのドット・アイコンをクリックするか、「FQDN」リンクをクリックします。
-
「レコードの管理」を選択し、「レコードの追加」をクリックします。
-
「タイプA (IPv4アドレス)」を選択し、「TTL」を「500」に設定して、反対のデータベース・システムの「プライマリ・エンドポイントIPアドレス」を入力します。
-
「レコードの追加」をクリックし、「変更の公開」をクリックします。
-
タスク4: postgres_fdw拡張を例で構成
-
外部データ・ラッパー(FDW)サーバーを作成します。
CREATE SERVER
コマンドは、postgres_fdw
ラッパーを使用して、fdw_serv
という名前の外部サーバーを定義します。ソースPostgreSQLデータベースのホスト、データベース名、ポートなどの接続詳細を指定します。これは、ターゲットPostgreSQLインスタンス内のソース・データにアクセスするための論理参照として機能します。CREATE SERVER <fdw_servername> FOREIGN DATA WRAPPER <fdw_servername> OPTIONS (host 'primary.xxxxxx.FQDN_Remote_source_DBSystem.... oci.oraclecloud.com', dbname 'remote_source_dbname', port '5432');
-
ユーザーのマップ。
CREATE USER MAPPING
コマンドは、ターゲットのPostgreSQLユーザー(arvindya
)をソース・データベース資格証明に関連付けます。これにより、ターゲット・サーバーが定義された外部サーバーに接続するときにターゲット認証が可能になります。これにより、実行された問合せターゲットがソース・サーバーで適切に認可されます。CREATE USER MAPPING FOR <user_name> SERVER <fdw_servername> OPTIONS (user <user_name>, password <'user_password'>);
-
スキーマ・ソースのインポート。
IMPORT FOREIGN SCHEMA
コマンドは、ソース・サーバーのパブリック・スキーマからすべての表を外部表としてターゲット・データベースにインポートします。これらの表はローカルに表示されますが、ソース・データベースからリアルタイムでデータをフェッチします。IMPORT FOREIGN SCHEMA <schema_name> FROM SERVER <fdw_server_name> INTO public;
次に例を示します。
-- Create extension
CREATE EXTENSION postgres_fdw;
-- Create FDW Server
CREATE SERVER fdw_serv FOREIGN DATA WRAPPER postgres_fdw OPTIONS (
host 'primary.xxxxxx.Remote Source DBSystem FQDN.....xxxxx.oci.oraclecloud.com',
dbname 'source',
port '5432'
);
-- User Mapping
CREATE USER MAPPING FOR arvindya SERVER fdw_serv OPTIONS (
user '<user_name>',
password '<user_password>'
);
-- Import Schema from source
IMPORT FOREIGN SCHEMA public FROM SERVER fdw_serv INTO public;
-- Validate Data
SELECT * FROM emp;
タスク5: dblink拡張機能の構成
dblink_connect
ファンクションは、指定された接続文字列を使用して、ターゲットPostgreSQLデータベースからソースPostgreSQLデータベースへの接続を確立します。これには、データベース名、ホスト、ポート、ユーザー名、パスワードなどのパラメータが含まれます。接続は一意の名前(myconn
)で識別され、後続のdblink
操作に使用されます。接続に成功すると、リモート問合せの準備状況を示す「OK」が返されます。
SELECT dblink_connect ('Conn_name', 'dbname=<Remote_source_DBName> port=5432 host=primary.xxxxxx..Remote_source_DbSystem FQDN..xxxx.oci.oraclecloud.com user=<user_name> password=<'user_password'>);
次に例を示します。
CREATE DATABASE target;
\c target
CREATE EXTENSION dblink;
-- Establish Connection
SELECT dblink_connect ('myconn', 'dbname=source port=5432 host=primary.xxxxxx..Remote_source_DbSystem FQDN..xxxx.oci.oraclecloud.com user=<user_name> password=<user_password>');
-- Select from Source
SELECT * FROM dblink('myconn', 'SELECT * FROM testing') AS t(a int);
-- Execute SQL remotely
SELECT * FROM dblink_exec('myconn', 'create table dblinking_table (id int)');
SELECT * FROM dblink_exec('myconn', 'insert into dblinking_table values(generate_series(1,10))');
SELECT * FROM dblink_exec('myconn', 'delete from dblinking_table where id <= 5');
-- Final Validation
SELECT * FROM dblink('myconn', 'SELECT * FROM dblinking_table') AS t(a int);
関連リンク
確認
- 作者 - Arvind Yadav氏(プリンシパル・メンバーのテクニカル・スタッフ)
その他の学習リソース
docs.oracle.com/learnで他のラボを確認するか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスして、Oracle Learning Explorerになります。
製品ドキュメントについては、Oracle Help Centerを参照してください。
Enable Inter-Database Access in OCI Database with PostgreSQL using the postgres_fdw and dblink Extensions
G40418-02