データベースのレプリケーションを再発明しようとしている場合は、本番対応のソリューションの 1 つを検討してください。
選択したデータをデータベース間でコピーするだけの場合は、追加モジュールdblinkを使用して、DB から DB にデータを直接コピーできます。オプションで SSL で暗号化します。サーバーは、ネット内のどこにでも配置できます。
別のデータベース (ネット内の任意の場所) からデータをフェッチする基本的な例は、次のようになります。
CREATE TABLE tbl (tbl_id integer, col1 text, col2 text);
SELECT dblink_connect('myserver');
-- FDW postgresql, USER MAPPING FOR postgres; PW from .pgpass
INSERT INTO tbl (tbl_id, col1, col2) -- same table exists on foreign server
SELECT *
FROM dblink('SELECT tbl_id, col1, col2 FROM tbl') AS b(
tbl_id integer
,col1 text
,col2 text);
SELECT dblink_disconnect();
これを関数に簡単にカプセル化できます。
CREATE OR REPLACE FUNCTION foo()
RETURNS text AS
$func$
-- code from above goes here
$func$ LANGUAGE sql;
電話:
SELECT foo();
こちらを使用していFOREIGN SERVERます。作成する基本的なステートメントの例:
FDW (まだ持っていない場合のみ):
CREATE FOREIGN DATA WRAPPER postgresql VALIDATOR postgresql_fdw_validator;
外部サーバー:
CREATE SERVER myserver
FOREIGN DATA WRAPPER postgresql
OPTIONS (hostaddr '1.2.3.4', port '5432', dbname 'mydb', sslmode 'require');
接続文字列に追加sslmode 'require'することで、SSL 暗号化接続のみを強制します。詳しくはこちらのマニュアルをご覧ください。
ユーザー マッピング:
CREATE USER MAPPING FOR postgres
SERVER myserver OPTIONS (user 'postgres');
そして、物事を簡素化して安全にするために、.pgpassファイルを使用してパスワードを提供しています。これを使用する前に、おそらくいくつかのドキュメントを読む必要があります。