PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Kursory z postgresem, gdzie przechowywane są dane i ile wywołań do DB

Zestaw danych dla kursora jest przygotowywany przez serwer w momencie wykonania pierwszego FETCH. Aplikacja kliencka otrzymuje tylko wyniki kolejnych instrukcji FETCH.

Jeśli serwer nie może używać indeksów do obsługi kursora, tworzony jest tymczasowy zestaw danych. Możesz wykonać ten prosty test:

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

Wykonaj instrukcje w tym skrypcie jeden po drugim:

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;

Pierwsze FETCH (*) działa mniej więcej w tym samym czasie co tworzenie podobnej tabeli tymczasowej:

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

Niektóre sterowniki mogą mieć własną implementację kursora po stronie klienta. Powinno to być wyraźnie opisane w dokumentacji sterownika.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sortuj listę krotek z uwzględnieniem lokalizacji (kolejność szwedzka)

  2. Jak zwrócić wartość z obietnicy?

  3. Jak wykonać zapytanie LIKE dla klucza jsonb?

  4. psql ustaw domyślny statement_timeout jako użytkownik w postgresie

  5. Postgres kolumna X nie istnieje