PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Kursor dengan postgres, di mana data disimpan dan berapa banyak panggilan ke DB

Dataset untuk kursor disiapkan oleh server pada saat eksekusi FETCH pertama. Aplikasi klien hanya menerima hasil pernyataan FETCH berikutnya.

Jika server tidak dapat menggunakan indeks untuk mempertahankan kursor, kumpulan data sementara dibuat. Anda dapat melakukan tes sederhana ini:

create table test(i int, v text);
insert into test
select i, i::text
from generate_series(1, 5000000) i;

Jalankan pernyataan dalam skrip ini satu per satu:

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 (*) bekerja kira-kira pada waktu yang hampir bersamaan dengan pembuatan tabel sementara yang serupa:

create temp table temp_test as
select * from test
order by random();             -- 51684 ms

Beberapa driver mungkin memiliki implementasi kursor sendiri di sisi klien. Ini harus dijelaskan secara eksplisit dalam dokumentasi pengemudi.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Berikan pernyataan yang disiapkan dengan array

  2. Cari array JSON untuk objek yang berisi nilai yang cocok dengan pola

  3. pg Admin 4 - kata sandi untuk pengguna postgres saat mencoba terhubung ke server PostgreSQL 13

  4. Windows Postgres berfungsi dengan grup agregat oleh

  5. Driver Postgres log JBoss tidak sesuai dengan JDBC