## 52.69. `pg_cursors`

[]()

 The `pg_cursors` view lists the cursors that are currently available. Cursors can be defined in several ways:

* via the [`DECLARE`](sql-declare.html) statement in SQL

* via the Bind message in the frontend/backend protocol, as described in [Section 53.2.3](protocol-flow.html#PROTOCOL-FLOW-EXT-QUERY)

* via the Server Programming Interface (SPI), as described in [Section 47.1](spi-interface.html)

 The `pg_cursors` view displays cursors created by any of these means. Cursors only exist for the duration of the transaction that defines them, unless they have been declared `WITH HOLD`. Therefore non-holdable cursors are only present in the view until the end of their creating transaction.

### Note

 Cursors are used internally to implement some of the components of PostgreSQL, such as procedural languages. Therefore, the `pg_cursors` view might include cursors that have not been explicitly created by the user.

**Table 52.70. `pg_cursors` Columns**

|                                                                      Column Type<br/><br/> Description                                                                     |
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|                                                               `name` `text`<br/><br/> The name of the cursor                                                               |
|                                          `statement` `text`<br/><br/> The verbatim query string submitted to declare this cursor                                           |
|`is_holdable` `bool`<br/><br/>`true` if the cursor is holdable (that is, it can be accessed after the transaction that declared the cursor has committed); `false` otherwise|
|                                         `is_binary` `bool`<br/><br/>`true` if the cursor was declared `BINARY`; `false` otherwise                                          |
|         `is_scrollable` `bool`<br/><br/>`true` if the cursor is scrollable (that is, it allows rows to be retrieved in a nonsequential manner); `false` otherwise          |
|                                             `creation_time` `timestamptz`<br/><br/> The time at which the cursor was declared                                              |

 The `pg_cursors` view is read-only.

