Postgresql cursor insert example

PostgreSQL Cursor Insert Example

In PostgreSQL, cursors are used to retrieve and manipulate rows from a query result. Cursors provide a way to fetch a small number of rows at a time, which can be useful for processing large result sets without consuming excessive memory.

Creating a Cursor

A cursor is created using the DECLARE statement in PostgreSQL. The DECLARE statement defines a cursor name and associates it with a SELECT statement.


      DECLARE cursor_name CURSOR FOR SELECT column1, column2 FROM table_name;
    

In the above example, "cursor_name" is the identifier for the cursor, and "SELECT column1, column2 FROM table_name" is the query that the cursor is associated with.

Opening a Cursor

Before fetching rows from a cursor, it needs to be opened using the OPEN statement:


      OPEN cursor_name;
    

Fetching Rows from a Cursor

Once the cursor is opened, rows can be fetched one at a time using the FETCH statement:


      FETCH cursor_name INTO variable1, variable2;
    

The FETCH statement retrieves the values of "column1" and "column2" from the current row of the cursor and stores them in "variable1" and "variable2" respectively.

Inserting Rows using a Cursor

To insert rows into a table using a cursor, you can combine the FETCH statement with the INSERT statement:


      FETCH cursor_name INTO variable1, variable2;
      INSERT INTO target_table (column1, column2) VALUES (variable1, variable2);
    

In the above example, each fetched row from the cursor is inserted into the "target_table" using the INSERT statement.

Closing a Cursor

After processing all the rows from a cursor, it should be closed using the CLOSE statement:


      CLOSE cursor_name;
    

This frees the resources associated with the cursor.

Example:

Let's consider a scenario where we have a table named "employees" with columns "id" and "name". We will create a cursor named "emp_cursor" and use it to insert rows from the "employees" table into another table named "new_employees".


      -- Create the cursor
      DECLARE emp_cursor CURSOR FOR SELECT id, name FROM employees;
        
      -- Open the cursor
      OPEN emp_cursor;
        
      -- Fetch and insert rows
      FETCH emp_cursor INTO emp_id, emp_name;
      WHILE FOUND LOOP
        INSERT INTO new_employees (id, name) VALUES (emp_id, emp_name);
        FETCH emp_cursor INTO emp_id, emp_name;
      END LOOP;
        
      -- Close the cursor
      CLOSE emp_cursor;
    

In the above example, we declared a cursor named "emp_cursor" associated with the SELECT statement retrieving "id" and "name" columns from the "employees" table. We then opened the cursor, fetched the first row into the "emp_id" and "emp_name" variables, and inserted that row into the "new_employees" table.

We then used a loop to continue fetching and inserting rows until the cursor has no more rows to fetch. Finally, we closed the cursor.

This is a basic example of using a cursor to insert rows into a table in PostgreSQL. Cursors provide a powerful way to process large result sets efficiently while using limited memory.

Leave a comment