dblink_get_result#

Примечание

Эта страница переведена при помощи нейросети GigaChat.

dblink_get_result – получает результат асинхронного запроса.

Синтаксис#

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

Описание#

dblink_get_result собирает результаты асинхронного запроса, отправленного ранее с помощью dblink_send_query. Если запрос еще не завершен, dblink_get_result будет ждать до тех пор, пока он не завершится.

Аргументы#

connname

Имя соединения для использования.

fail_on_error

Если true (по умолчанию, если опущено), то ошибка, возникающая на удаленной стороне соединения, вызывает ошибку и локально. Если false, удаленная ошибка сообщается локально как УВЕДОМЛЕНИЕ, а функция не возвращает строки.

Возвращаемое значение#

Для асинхронного запроса (то есть 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)