Tập dữ liệu cho một con trỏ được máy chủ chuẩn bị tại thời điểm thực hiện FETCH đầu tiên. Ứng dụng khách chỉ nhận được kết quả của các câu lệnh FETCH tiếp theo.
Nếu máy chủ không thể sử dụng các chỉ mục để duy trì con trỏ, thì tập dữ liệu tạm thời sẽ được tạo. Bạn có thể thực hiện kiểm tra đơn giản này:
create table test(i int, v text);
insert into test
select i, i::text
from generate_series(1, 5000000) i;
Thực thi từng câu lệnh trong tập lệnh này:
begin;
declare cur cursor
for select * from test
order by random(); -- 17 ms
fetch next cur; -- 37294 ms (*)
fetch next cur; -- 0 ms
fetch prior cur; -- 0 ms
fetch absolute 1000000 cur; -- 181 ms
fetch relative 1000000 cur; -- 163 ms
fetch first cur; -- 0 ms
fetch last cur; -- 0 ms
rollback;
First FETCH (*) thực hiện gần như cùng lúc với việc tạo một bảng tạm thời tương tự:
create temp table temp_test as
select * from test
order by random(); -- 51684 ms
Một số trình điều khiển có thể có triển khai con trỏ của riêng họ ở phía máy khách. Điều này phải được mô tả rõ ràng trong tài liệu của người lái xe.