web-dev-qa-db-ja.com

PostgreSQLでdblinkを使用(インストール)する方法は?

私はOracleに慣れており、スキーマにdblinkを作成してから、次のようなリモートデータベースにアクセスします:mytable@myremotedb、とにかくPostgreSQLでも同じことがありますか?

現在、私はこのようなdblinkを使用しています:

SELECT logindate FROM dblink('Host=dev.toto.com
                              user=toto
                              password=isok
                              dbname=totofamily', 'SELECT logindate FROM loginlog');

このコマンドを実行すると、次のエラーが表示されます。

ヒント:指定された名前と引数のタイプに一致する関数はありません。明示的な型キャストを追加する必要がある場合があります。

誰もがアイデアを持っていますか? dblinksを「アクティブ化」する必要がありますか、または使用する前に何かを行う必要がありますか?

クエリするリモートデータベースで何かすることはありますか? dblinkもアクティブにする必要がありますか?私はcould not establish connection。これは、ラインタイプです。

SELECT dblink_connect_u('Host=x.x.x.x dbname=mydb user=root port=5432');

IPアドレスが正しく、Postgresがリモートサーバーで実行されています。何か案が?

54
Spredzy

PostgreSQL 9.1以降では、追加モジュールのインストールが簡素化されました。 登録済み拡張機能(dblinkを含む)CREATE EXTENSION

CREATE EXTENSION dblink;

デフォルトのスキーマ(デフォルトではpublic)にインストールします。 search_path は、コマンドを実行する前に適切に設定され、スキーマは、それを操作する必要があるすべてのユーザーに表示されます。

または、次を使用して、選択した任意のスキーマにインストールできます。

CREATE EXTENSION dblink SCHEMA extensions;

見る:

データベースごとに1回実行します。または、標準システムデータベースで実行しますtemplate1を使用して、every新しく作成されたDBに自動的に追加します。 マニュアルの詳細

モジュールを提供するファイルを最初にサーバーにインストールする必要があります。 Debianおよび派生物の場合、これはパッケージになります postgresql-contrib-9.1 -PostgreSQL 9.1の場合、明らかに。

108

DBLINKを使用して、データベース間クエリのために内部データベースを接続しています。

この記事から引用した参照

DbLink拡張機能をインストールします。

CREATE EXTENSION dblink;

DbLinkの確認:

SELECT pg_namespace.nspname, pg_proc.proname 
FROM pg_proc, pg_namespace 
WHERE pg_proc.pronamespace=pg_namespace.oid 
   AND pg_proc.proname LIKE '%dblink%';

データベースの接続テスト:

SELECT dblink_connect('Host=localhost user=postgres password=enjoy dbname=postgres');
22
Anvesh

Linuxでは、dblink.sqlを検索し、postgresqlコンソールで次のように実行して、必要なすべての関数を作成します。

\i /usr/share/postgresql/8.4/contrib/dblink.sql 

contribパッケージをインストールする必要があるかもしれません:Sudo apt-get install postgresql-contrib

12
evgeni

通常、モジュールのインストールには、データベースのインストールに含まれているsqlスクリプトを実行する必要があります。

LinuxのようなOSを想定

find / -name dblink.sql

場所を確認して実行する

4
Unreason

以下を使用して追加できます。

$psql -d databaseName -c "CREATE EXTENSION dblink"
2
angelous
# or even faster copy paste answer if you have Sudo on the Host 
Sudo su - postgres  -c "psql template1 -c 'CREATE EXTENSION IF NOT EXISTS \"dblink\";'"
0
Yordan Georgiev