私は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がリモートサーバーで実行されています。何か案が?
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の場合、明らかに。
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');
Linuxでは、dblink.sqlを検索し、postgresqlコンソールで次のように実行して、必要なすべての関数を作成します。
\i /usr/share/postgresql/8.4/contrib/dblink.sql
contribパッケージをインストールする必要があるかもしれません:Sudo apt-get install postgresql-contrib
通常、モジュールのインストールには、データベースのインストールに含まれているsqlスクリプトを実行する必要があります。
LinuxのようなOSを想定
find / -name dblink.sql
場所を確認して実行する
以下を使用して追加できます。
$psql -d databaseName -c "CREATE EXTENSION dblink"
# 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\";'"