3

質問の目的は、2 つのPostgreSQLデータベース間のリモート接続を作成することです。私は現在Navicatを使用しています。PuTTYCygwinを使用して SSH サーバーを作成する方法に関する多くのチュートリアルを読みましたが、ローカル テストでのみ機能し、他のコンピューターでパブリック IP アドレスを使用しようとすると機能しません。

これが私的な/特定の問題になるのを防ぐために、2 台の Windows コンピューター間で Web サーバーなしで SSH トンネルを取得する方法に固執します。これは、実際には Windows ユーザーにとって一般的な問題です。会社で 6 台、自宅で 2 台の異なるコンピューターで試しましたが、常に同じ答えでした。私がフォーラムやスタック オーバーフローで行った調査によると、これはよくある問題です。SSH サーバーがローカルでスムーズに動作することを示す 2 つの画像を添付しましたが、ISPによって割り当てられた IP アドレスを使用すると失敗します。

Windows環境でこれを行うのは悪い考えだと思い始めています.. ps。1- bitvise をインストールすると、ポート 22 が自動的に「開く」ので、ポートの問題ではないと思います。2- 私の会社のインターネット プロバイダーと自宅のプロバイダーは異なるため、これも ISP の問題ではないと思います。これ以上何があるかわかりません...

http://matheus25.site90.net/itworks.jpg

http://matheus25.site90.net/itdoesntwork.jpg

4

2 に答える 2

1

データベースのレプリケーションを再発明しようとしている場合は、本番対応のソリューションの 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ファイルを使用してパスワードを提供しています。これを使用する前に、おそらくいくつかのドキュメントを読む必要があります。

于 2013-04-08T18:12:24.087 に答える