dblink

dblink —在远程数据库中执行查询

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子句中声明的列类型的有效 Importing,它就会成功。

Notes

对 sched 查询使用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%';

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)