Postgresql 中文操作指南
Synopsis
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
Description
dblink 在远程数据库中执行查询(通常是 SELECT ,但它可以是返回行数的任何 SQL 语句)。
当给定两个 text 参数时,第一个参数首先作为持久连接的名称进行查找;如果找到,该命令便在这种连接上执行。如果未找到,第一个参数将被视为 dblink_connect 的连接信息字符串,并且只是在此命令的持续时间内建立指示的连接。
Arguments
-
connname
-
要使用的连接的名称;省略此参数以使用未命名的连接。
-
-
connstr
-
连接信息字符串,如 dblink_connect 之前所述。
-
-
sql
-
您希望在远程数据库中执行的 SQL 查询,例如 select * from foo 。
-
-
fail_on_error
-
如果值为 true(省略时为默认值),则在连接的远程端抛出的错误将导致在本地也抛出错误。如果为 false,远程错误在本地将报告为 NOTICE,并且函数不返回任何行。
-
Return Value
该函数返回查询产生的行。因为 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%';
FROM 子句的“别名”部分必须指定该函数将返回的列名称和类型。(在别名中指定列名称实际上是标准的 SQL 语法,但是指定列类型是 PostgreSQL 的扩展。)这样做能够让系统在尝试执行函数之前了解 * 应该扩展成什么,以及 WHERE 子句中的 proname 对应什么。在运行时,如果来自远程数据库的实际查询结果与 FROM 子句中显示的列数不同,将抛出错误。但是,列名称不必匹配,并且 dblink 也不要求完全匹配类型。只要返回的数据字符串是 FROM 子句中声明的列类型的有效输入,它就会成功。
Notes
通过使用预先确定的查询,可以创建视图。这允许将列类型信息埋在视图中,而不是在每次查询中都要拼写出来。例如:
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%';
Examples
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)