2017-01-23 6 views
0

私は、Oracleでは、保存されたdblinkを作成することができます。Postgresqlはストアドデータベースリンクを作成します

CREATE PUBLIC DATABASE LINK my_link CONNECT TO my_schema IDENTIFIED BY shema_password USING 'remote'; 

その後、我々は我々のクエリでそれを使用することができます:作成データベース・リンク用

スクリプト:たとえば

SELECT * FROM [email protected]_link; 

私はPostgresのために同じソリューションを見つけることができませんでした。

このためには、名前paramのdblink_connectを使用する必要があります。しかし、作成された名前のdblinkは、セッションの終了後に破棄されます。

それとも我々は、すべてのクエリのデータベース・リンク接続を作成することができます

SELECT * 
FROM dblink('host= port= dbname= user= password=', 
      'select table_schema, table_name from information_schema.tables where table_schema = ''data''') AS t1 (table_schema TEXT, table_name TEXT); 

は、それが可能Postgresの中に保存されたデータベース・リンクを作成して、別のクエリでそれを使用しますか?または、それらをカプセル化するdblink接続パラメータを返す関数を作成する必要がありますか?

postgres_fdw拡張を作成します:私は外国人のテーブルを使用しようとすると、次のステップを実行します

CREATE EXTENSION IF NOT EXISTS postgres_fdw; 

は、サーバーを作成します。

CREATE SERVER my_server FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host '-', port '-', dbname '-'); 

とのマッピングを作成しますユーザー設定リモートユーザとパスワード 'SYS':

CREATE USER MAPPING FOR sys SERVER light_house OPTIONS (USER 'remote_user', PASSWORD 'remove_password'); 

GRANT USAGE ON FOREIGN SERVER my_server TO sys; 

は、スキーマ内の外部テーブルを作成します。

[2F003] ERROR: password is required 
Description: Non-superuser cannot connect if the server does not request a password. 
Help: Target server's authentication method must be changed. 
+0

"*サーバーがパスワードを要求しない場合、スーパーユーザー以外は接続できません*" - 接続するためにパスワードを必要としない運用サーバーを正直実行しますか? –

+0

@a_horse_with_no_name申し訳ありませんが、私は断言しません。私はユーザーのマッピング(私は更新された質問とスクリプトを追加)でリモートユーザーにパスワードを宣言し、私はそれが十分か間違っているか? – HAYMbl4

+0

エラーメッセージは、サーバーがパスワードを要求していないことを示しているようです。 –

答えて

関連する問題