PostgreSQL – Cursores

Un Cursor en PostgreSQL se usa para procesar tablas grandes. Supongamos que una tabla tiene 10 millones o mil millones de filas. Al realizar una operación SELECCIONAR en la tabla, llevará algún tiempo procesar el resultado y lo más probable es que dé un error de «memoria insuficiente» y el programa se cerrará.

Un Cursor solo se puede declarar dentro de una transacción. El cursor no calcula los datos, sino que solo prepara la consulta para que sus datos se puedan crear cuando se llame a FETCH. Al final, simplemente confirme la transacción.

Sintaxis:

DECLARE 
    [cursor_name] CURSOR FOR [query]

Analicemos la sintaxis anterior:

  • Use DECLARE para declarar un cursor
  • [cursor_name] – Dar cualquier nombre al cursor
  • [consulta] – Dar una consulta al cursor

Después de declarar un cursor, podemos obtener los datos usando FETCH. FETCH obtiene la(s) siguiente(s) fila(s) del cursor. Si no se encuentra ninguna fila, devuelve NULL.

Sintaxis:

FETCH [direction (rows)] FROM [cursor_name];

where direction can be empty,
number of rows you want or one of the following:

NEXT
PRIOR
FIRST
LAST
ABSOLUTE count
RELATIVE count
count
ALL
FORWARD
FORWARD count
FORWARD ALL
BACKWARD
BACKWARD count
BACKWARD ALL

Vamos a crear una tabla de muestra usando los siguientes comandos para ejemplos:

CREATE TABLE students (
   student_id serial PRIMARY KEY,
   full_name VARCHAR NOT NULL,
   branch_id INT
);

Inserte datos en la tabla de estudiantes de la siguiente manera:

INSERT INTO students (
    student_id,
    full_name,
    branch_id
)
VALUES
    (1, 'M.S Dhoni', NULL),
    (2, 'Sachin Tendulkar', 1),
    (3, 'R. Sharma', 1),
    (4, 'S. Raina', 1),
    (5, 'B. Kumar', 1),
    (6, 'Y. Singh', 2),
    (7, 'Virender Sehwag ', 2),
    (8, 'Ajinkya Rahane', 2),
    (9, 'Shikhar Dhawan', 2),
    (10, 'Mohammed Shami', 3),
    (11, 'Shreyas Iyer', 3),
    (12, 'Mayank Agarwal', 3),
    (13, 'K. L. Rahul', 3),
    (14, 'Hardik Pandya', 4),
    (15, 'Dinesh Karthik', 4),
    (16, 'Jasprit Bumrah', 7),
    (17, 'Kuldeep Yadav', 7),
    (18, 'Yuzvendra Chahal', 8),
    (19, 'Rishabh Pant', 8),
    (20, 'Sanju Samson', 8);

Ahora que la tabla está lista, podemos declarar nuestro cursor.

BEGIN;

DECLARE 
    my_cursor CURSOR FOR SELECT * FROM students;

Obtener los datos.

FETCH 10 FROM my_cursor;

Producción:

FETCH PRIOR FROM my_cursor;
FETCH PRIOR FROM my_cursor;

La consulta anterior le dará las filas 9 y 8 ya que en este momento nuestro cursor está en 10;

FETCH 6 FROM my_cursor;

Producción:

COMMIT;

Confirma la transacción al final.

Publicación traducida automáticamente

Artículo escrito por adityapande88 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *