dblink <refpurpose>executes a query in a remote database</refpurpose> — リモートデータベースで問い合わせを実行します
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
<function>dblink</function> executes a query (usually a <command>SELECT</command>,
but it can be any SQL statement that returns rows) in a remote database.
dblink
はリモートデータベースで問い合わせ(通常はSELECT
ですが行を返す任意のSQLコマンドを行うことができます)を実行します。
When two <type>text</type> arguments are given, the first one is first
looked up as a persistent connection's name; if found, the command
is executed on that connection. If not found, the first argument
is treated as a connection info string as for <function>dblink_connect</function>,
and the indicated connection is made just for the duration of this command.
2つのtext
型の引数が与えられた場合、一番目の引数はまず永続接続の名前を検索するために使われます。
もし見つかれば、コマンドがその接続上で実行されます。
見つからなければ、一番目の引数はdblink_connect
用の接続情報文字列として扱われ、このコマンド実行時と同様に指定された接続が開きます。
connname
Name of the connection to use; omit this parameter to use the unnamed connection. 使用する接続の名前です。 無名の接続を使用する場合はこのパラメータを省略します。
connstr
A connection info string, as previously described for
<function>dblink_connect</function>.
上でdblink_connect
で説明した接続情報文字列です。
sql
The SQL query that you wish to execute in the remote database,
for example <literal>select * from foo</literal>.
例えばselect * from foo
といった、リモートデータベースで実行させるSQL問い合わせです。
fail_on_error
If true (the default when omitted) then an error thrown on the remote side of the connection causes an error to also be thrown locally. If false, the remote error is locally reported as a NOTICE, and the function returns no rows. 真(省略時のデフォルト)の場合、接続のリモート側で発生したエラーによりローカル側でもエラーが発生します。 偽の場合リモート側のエラーはローカル側にはNOTICEとして報告され、この関数は行を返しません。
The function returns the row(s) produced by the query. Since
<function>dblink</function> can be used with any query, it is declared
to return <type>record</type>, rather than specifying any particular
set of columns. This means that you must specify the expected
set of columns in the calling query — otherwise
<productname>PostgreSQL</productname> would not know what to expect.
Here is an example:
この関数は問い合わせにより生成された行を返します。
dblink
は任意の問い合わせで使用することができますので、これは特定の列集合を指定するのではなく、record
型を返すものと宣言されています。
これは呼び出し元の問い合わせで想定列集合を指定しなければならないことを意味します。
さもないとPostgreSQLは何が想定されているかわかりません。
以下に例を示します。
SELECT * FROM dblink('dbname=mydb options=-csearch_path=', 'select proname, prosrc from pg_proc') AS t1(proname name, prosrc text) WHERE proname LIKE 'bytea%';
The <quote>alias</quote> part of the <literal>FROM</literal> clause must
specify the column names and types that the function will return.
(Specifying column names in an alias is actually standard SQL
syntax, but specifying column types is a <productname>PostgreSQL</productname>
extension.) This allows the system to understand what
<literal>*</literal> should expand to, and what <structname>proname</structname>
in the <literal>WHERE</literal> clause refers to, in advance of trying
to execute the function. At run time, an error will be thrown
if the actual query result from the remote database does not
have the same number of columns shown in the <literal>FROM</literal> clause.
The column names need not match, however, and <function>dblink</function>
does not insist on exact type matches either. It will succeed
so long as the returned data strings are valid input for the
column type declared in the <literal>FROM</literal> clause.
FROM
句の「別名」部分は関数が返す列名とその型を指定しなければなりません。
(別名内の列名の指定はSQL標準の構文ですが、列の型の指定はPostgreSQLの拡張です。)
これによりシステムは、関数を実行する前に、*
がどのように展開されるか、WHERE
句内のproname
が何を参照するかを理解します。
実行時、リモートデータベースから返る実際の問い合わせの結果がFROM
句で示された列数と異なる場合エラーが発生します。
しかし、列名は一致する必要はありません。
また、dblink
は正確な型一致も強制しません。
返されるデータ文字列がFROM
句で宣言された列型の有効な入力である限り成功します。
A convenient way to use <function>dblink</function> with predetermined
queries is to create a view.
This allows the column type information to be buried in the view,
instead of having to spell it out in every query. For example,
前もって判明している問い合わせをdblink
で使用する簡便な方法はビューを作成することです。
これにより問い合わせの度に列型の情報を記載することなく、ビュー内に隠すことができます。
以下に例を示します。
CREATE VIEW myremote_pg_proc AS SELECT * FROM dblink('dbname=postgres options=-csearch_path=', '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 options=-csearch_path=', '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 options=-csearch_path='); 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 options=-csearch_path='); 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)