dblink

PostgreSQL 9.4.4 中文手册
上一页 | 上一级 |  | 下一页

# 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语句）。

当给定两个`text`参数时，第一个作为持久连接名称首先被查找；如果发现了， 那么在连接上执行该命令。如果没有发现，那么第一个参数被看作`dblink_connect`的连接信息字符串，并且指定连接为了该命令的整个时间段。

## 参数

`conname`

  要使用的连接名称；省略这个参数使用未命名连接。

`connstr`

  连接信息字符串，如先前描述的`dblink_connect`。

`sql`

  你希望在远程数据库中执行的SQL查询，比如`select * from foo`。

`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`子句的"alias"部分必须指定函数将要返回的列名和类型。 （在别名中指定列名实际上是标准SQL语法，但是指定列类型是PostgreSQL扩展。） 这允许系统理解`*`应该扩展到什么，以及在`WHERE`子句中`proname` 指向什么，提前尝试执行该函数。在运行时，如果远程数据库的实际查询结果没有`FROM`子句中显示 的相同列数，那么将抛出错误。列名不需要匹配，然而，`dblink` 不坚持确切类型匹配。只要返回的数据字符串对于`FROM`子句中声明的 列类型是有效输入那么它将成功。

## 注意

预定义查询使用`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