RETRIEVE

Извлекает строки из запроса с использованием параллельного курсора извлечения.

Обзор

RETRIEVE { <count> | ALL } FROM ENDPOINT <endpoint_name>

Описание

RETRIEVE извлекает строки с помощью ранее созданного параллельного курсора извлечения. Строки извлекаются в отдельных сеансах извлечения — прямых подключениях к отдельным конечным точкам сегментов, которые предоставляют результаты для каждого конкретного сегмента. При запуске сеанса извлечения необходимо указать параметр gp_retrieve_conn=true в запросе на подключение. Поскольку сеанс извлечения независим от параллельных курсоров извлечения и соответствующих им конечных точек, вы можете выполнять RETRIEVE из нескольких конечных точек в одном сеансе извлечения.

Параллельный курсор извлечения имеет связанную с ним позицию, которая используется командой RETRIEVE. Позиция курсора может находиться до первой строки результата запроса, на любой конкретной строке результата или после последней строки результата.

Примечание!
Так как Database не поддерживает прокручиваемые курсоры, команда RETRIEVE перемещает параллельный курсор извлечения только вперёд.

При создании параллельный курсор извлечения устанавливается перед первой строкой. После извлечения нескольких строк курсор оказывается на последней извлечённой строке.

Если выполнение RETRIEVE достигает конца доступных строк, курсор остаётся позиционированным после последней строки.

RETRIEVE ALL всегда оставляет параллельный курсор извлечения позиционированным после последней строки.

Параметры

  • count
    • Извлечь следующие count строк. Значение count должно быть положительным числом.
  • ALL
    • Извлечь все оставшиеся строки.
  • endpoint_name
    • Имя конечной точки, из которой следует извлечь строки.

      Вывод

      При успешном завершении команда RETRIEVE возвращает извлечённые строки (возможно, пустые) и количество извлечённых строк (возможно, ноль).

Примечания

Для определения параллельного курсора извлечения используйте команду DECLARE ... PARALLEL RETRIEVE CURSOR.

Параллельные курсоры извлечения не поддерживают операции FETCH и MOVE.

Примеры

Запустите транзакцию:

BEGIN;

Создайте параллельный курсор извлечения:

DECLARE mycursor PARALLEL RETRIEVE CURSOR FOR SELECT * FROM films;

Выведите список конечных точек курсора:

SELECT * FROM gp_endpoints WHERE cursorname='mycursor';

Обратите внимание на hostname, port, auth_token и name, связанные с каждой конечной точкой.

В другом окне терминала запустите сеанс извлечения, используя hostname, port и auth_token, полученные из предыдущего запроса. Например:

PGPASSWORD=d3825fc07e56bee5fcd2b1d0b600c85e PGOPTIONS='-c gp_retrieve_conn=true' psql -d testdb -h sdw3 -p 6001;

Извлеките все строки из конечной точки (например, конечной точки с именем prc10000001100000005):

RETRIEVE ALL FROM ENDPOINT prc10000001100000005;

Завершите сеанс извлечения.

\q

Вернитесь в исходный сеанс, закройте курсор и завершите транзакцию:

CLOSE mycursor;
COMMIT;

Совместимость

RETRIEVE является расширением Database. Стандарт SQL не предусматривает параллельные курсы извлечения.

Смотрите также

DECLARE, CLOSE