PostgreSQL 8.4.1文書
前のページ | 巻戻し |  | 早送り | 次のページ

# dblink

## 名前

dblink -- リモートデータベースで問い合わせを実行します

## 概要

        dblink(text connname, text sql [, bool fail_on_error]) returns setof record
        dblink(text connstr, text sql [, bool fail_on_error]) returns setof record
        dblink(text sql [, bool fail_on_error]) returns setof record

## 説明

`dblink`はリモートデータベースで問い合わせ（通常は`SELECT`ですが行を返す任意のSQLコマンドを行うことができます）を実行します。

2つの`text`型の引数が与えられた場合、一番目の引数はまず永続接続の名前を検索するために使われます。 もし見つかれば、コマンドがその接続上で実行されます。 見つからなければ、一番目の引数は`dblink_connect`用の接続情報文字列として扱われ、このコマンド実行時と同様に指定された接続が開きます。

## 引数

`conname`

  使用する接続の名前です。 無名の接続を使用する場合はこのパラメータを省略します。

`connstr`

  上で`dblink_connect`で説明した接続情報文字列です。

`sql`

  例えば`select * from foo`といった、リモートデータベースで実行させるSQL問い合わせです。

`fail_on_error`

  真（省略時のデフォルト）の場合、接続のリモート側で発生したエラーによりローカル側でもエラーが発生します。 偽の場合リモート側のエラーはローカル側にはNOTICEとして報告され、この関数は行を返しません。

## 戻り値

この関数は問い合わせにより生成された行を返します。 `dblink`は任意の問い合わせで使用することができますので、これは特定の列集合を指定するのではなく、`record`型を返すものと宣言されています。 これは呼び出し元の問い合わせで想定列集合を指定しなければならないことを意味します。 さもないとPostgreSQLは何が想定されているかわかりません。 以下に例を示します。

    SELECT *
        FROM dblink('dbname=mydb', 'select proname, prosrc from pg_proc')
          AS t1(proname name, prosrc text)
        WHERE proname LIKE 'bytea%';

`FROM`句の"別名"部分は関数が返す列名とその型を指定しなければなりません。 （別名内の列名の指定はSQL標準の構文ですが、列の型の指定はPostgreSQLの拡張です。） これによりシステムは、関数を実行する前に、`*`がどのように展開されるか、`WHERE`句内の`proname`が何を参照するかを理解します。 実行時、リモートデータベースから返る実際の問い合わせの結果が`FROM`句で示された列数と異なる場合エラーが発生します。 しかし、列名は一致する必要はありません。 また、`dblink`は正確な型一致も強制しません。 返されるデータ文字列が`FROM`句で宣言された列型の有効な入力である限り成功します。

## 注釈

`dblink`はリモート側の問い合わせ結果をローカルシステム側に渡す前にすべて取り込みます。 問い合わせが大量の行を返すと想定される場合、`dblink_open`でカーソルを開き、一度に管理可能な行数を取り出す方が良いでしょう。

前もって判明している問い合わせを`dblink`で使用する簡便な方法はビューを作成することです。 これにより問い合わせの度に列型の情報を記載することなく、ビュー内に隠すことができます。 以下に例を示します。

        create view myremote_pg_proc as
          select *
            from dblink('dbname=postgres', 'select proname, prosrc from pg_proc')
            as t1(proname name, prosrc text);

        select * from myremote_pg_proc where proname like 'bytea%';

## 例

     select * from dblink('dbname=postgres', 'select proname, prosrc from pg_proc')
      as t1(proname name, prosrc text) where proname like 'bytea%';
       proname   |   prosrc
     ------------+------------
      byteacat   | byteacat
      byteaeq    | byteaeq
      bytealt    | bytealt
      byteale    | byteale
      byteagt    | byteagt
      byteage    | byteage
      byteane    | byteane
      byteacmp   | byteacmp
      bytealike  | bytealike
      byteanlike | byteanlike
      byteain    | byteain
      byteaout   | byteaout
     (12 rows)

     select dblink_connect('dbname=postgres');
      dblink_connect
     ----------------
      OK
     (1 row)

     select * from dblink('select proname, prosrc from pg_proc')
      as t1(proname name, prosrc text) where proname like 'bytea%';
       proname   |   prosrc
     ------------+------------
      byteacat   | byteacat
      byteaeq    | byteaeq
      bytealt    | bytealt
      byteale    | byteale
      byteagt    | byteagt
      byteage    | byteage
      byteane    | byteane
      byteacmp   | byteacmp
      bytealike  | bytealike
      byteanlike | byteanlike
      byteain    | byteain
      byteaout   | byteaout
     (12 rows)

     select dblink_connect('myconn', 'dbname=regression');
      dblink_connect
     ----------------
      OK
     (1 row)

     select * from dblink('myconn', 'select proname, prosrc from pg_proc')
      as t1(proname name, prosrc text) where proname like 'bytea%';
       proname   |   prosrc
     ------------+------------
      bytearecv  | bytearecv
      byteasend  | byteasend
      byteale    | byteale
      byteagt    | byteagt
      byteage    | byteage
      byteane    | byteane
      byteacmp   | byteacmp
      bytealike  | bytealike
      byteanlike | byteanlike
      byteacat   | byteacat
      byteaeq    | byteaeq
      bytealt    | bytealt
      byteain    | byteain
      byteaout   | byteaout
     (14 rows)

前のページ | ホーム | 次のページ
dblink_disconnect | 上に戻る | dblink_exec