dblink_get_result
Prev UpF.11. dblink — conectarse a otras bases de datos PostgreSQLHome Next

dblink_get_result

dblink_get_result — obtiene el resultado de una consulta asíncrona

Synopsis

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

Descripción

dblink_get_result recopila los resultados de una consulta asíncrona enviada previamente con dblink_send_query. Si la consulta aún no se ha completado, dblink_get_result esperará hasta que lo haga.

Argumentos

connname

Nombre de la conexión a utilizar.

fail_on_error

Si es true (el valor por defecto cuando se omite), entonces un error lanzado en el lado remoto de la conexión hace que también se lance un error localmente. Si es false, el error remoto se reporta localmente como una NOTICE, y la función no devuelve ninguna fila.

Valor de retorno

Para una consulta asíncrona (es decir, una sentencia SQL que devuelve filas), la función devuelve las filas producidas por la consulta. Para usar esta función, necesitarás especificar el conjunto esperado de columnas, como se discutió previamente para dblink.

Para un comando asíncrono (es decir, una sentencia SQL que no devuelve filas), la función devuelve una sola fila con una sola columna de texto que contiene la cadena de estado del comando. Sigue siendo necesario especificar que el resultado tendrá una sola columna de texto en la cláusula llamadora FROM.

Notas

Esta función debe llamarse si dblink_send_query devolvió 1. Debe llamarse una vez por cada consulta enviada, y una vez adicional para obtener un resultado de conjunto vacío, antes de que la conexión se pueda usar de nuevo.

Al usar dblink_send_query y dblink_get_result, dblink recupera todo el resultado de la consulta remota antes de devolver cualquier parte del mismo al procesador de consultas local. Si la consulta devuelve un gran número de filas, esto puede resultar en un aumento transitorio de memoria en la sesión local. Puede ser mejor abrir dicha consulta como un cursor con dblink_open y luego recuperar un número manejable de filas a la vez. Alternativamente, utiliza el dblink() normal, que evita el aumento de memoria al volcar conjuntos de resultados grandes al disco.

Ejemplos

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)

Prev Up Next
dblink_get_notify Home dblink_cancel_query