dblink_get_result

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

# dblink_get_result

## 名称

dblink_get_result -- 获得异步查询结果

## 大纲

    dblink_get_result(text connname [, bool fail_on_error]) returns setof record

## 描述

`dblink_get_result`收集先前使用`dblink_send_query`发送的异步查询结果。 如果还没完成查询，那么`dblink_get_result`将等待它。

## 参数

`conname`

  要使用的连接名字。

`fail_on_error`

  如果真（忽略时缺省）那么在连接的远程端抛出的错误也会导致本地抛出错误， 如果假，那么远程错误在本地作为NOTICE被报告， 并且函数没有返回行。

## 返回值

一个异步查询（也就是说，返回行的SQL语句）， 该函数返回通过查询产生的行。要使用该函数，你将需要指定预期的字段集， 正如前面讨论的`dblink`。

一个异步命令（也就是说，没有返回行的SQL语句）， 该函数返回带有该命令的状态字符串的单文本列的单一行。 声明结果将在调用`FROM`子句中有单一文本列。

## 注意

如果`dblink_send_query`返回1，那么必须调用该函数。 它必须被每一个查询调用，并且一个额外时间来获取空集结果， 连接之前可以再次使用。

当在返回它到本地查询处理器之前使用`dblink_send_query`和 `dblink_get_result`, dblink抓取 整个远程查询结果。如果查询返回大量行，那么 这可以导致本地会话短暂内存膨胀。它可以更好的打开这个查询比如使用`dblink_open`的游标， 然后抓取每次可管理的行数。另外，使用普通的`dblink()`通过多任务缓冲处理大量结果集到磁盘避免内存膨胀。

## 例子

    contrib_regression=# SELECT dblink_connect('dtest1', 'dbname=contrib_regression');
     dblink_connect
    ----------------
     OK
    (1 row)

    contrib_regression=# SELECT * FROM
    contrib_regression-# dblink_send_query('dtest1', 'select * from foo where f1 < 3') AS t1;
     t1
    ----
      1
    (1 row)

    contrib_regression=# SELECT * FROM dblink_get_result('dtest1') AS t1(f1 int, f2 text, f3 text[]);
     f1 | f2 |     f3
    ----+----+------------
      0 | a  | {a0,b0,c0}
      1 | b  | {a1,b1,c1}
      2 | c  | {a2,b2,c2}
    (3 rows)

    contrib_regression=# SELECT * FROM dblink_get_result('dtest1') AS t1(f1 int, f2 text, f3 text[]);
     f1 | f2 | f3
    ----+----+----
    (0 rows)

    contrib_regression=# SELECT * FROM
    contrib_regression-# dblink_send_query('dtest1', 'select * from foo where f1 < 3; select * from foo where f1 > 6') AS t1;
     t1
    ----
      1
    (1 row)

    contrib_regression=# SELECT * FROM dblink_get_result('dtest1') AS t1(f1 int, f2 text, f3 text[]);
     f1 | f2 |     f3
    ----+----+------------
      0 | a  | {a0,b0,c0}
      1 | b  | {a1,b1,c1}
      2 | c  | {a2,b2,c2}
    (3 rows)

    contrib_regression=# SELECT * FROM dblink_get_result('dtest1') AS t1(f1 int, f2 text, f3 text[]);
     f1 | f2 |      f3
    ----+----+---------------
      7 | h  | {a7,b7,c7}
      8 | i  | {a8,b8,c8}
      9 | j  | {a9,b9,c9}
     10 | k  | {a10,b10,c10}
    (4 rows)

    contrib_regression=# SELECT * FROM dblink_get_result('dtest1') AS t1(f1 int, f2 text, f3 text[]);
     f1 | f2 | f3
    ----+----+----
    (0 rows)

上一页 | 起始页 | 下一页
dblink_get_notify | 上一级 | dblink_cancel_query