dblink_get_result — obtiene el resultado de una consulta asíncrona
dblink_get_result(text connname [, bool fail_on_error]) returns setof record
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.
connnameNombre de la conexión a utilizar.
fail_on_errorSi 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.
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.
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.
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)