SQLSTATE 34000 ERROR Class 34: Invalid Cursor Name

invalid_cursor_name Invalid Cursor Name — SQLSTATE 34000

The named cursor does not exist.

PG 12, 13, 14, 15, 16, 17, 18 Official docs
Last reviewed May 2025 Grounded in source

Symptoms

The named cursor does not exist.

  • The error is written to the server log and returned to the client carrying SQLSTATE 34000.
  • Any driver (libpq, JDBC, psycopg, npgsql, pgx) surfaces this code in its error object so you can branch on it programmatically.
  • PL/pgSQL can trap it by name: EXCEPTION WHEN invalid_cursor_name THEN.

Environment

Severity: ERROR  |  PostgreSQL versions: 12, 13, 14, 15, 16, 17

Reproduce with the exact statement and read the full message in the server log (raise log_min_messages / set log_min_error_statement for more context).

Root Cause

A FETCH/CLOSE referenced a cursor that was never declared or has already closed.

Diagnostic Queries

Recovery

Steps to resolve 34000:

  1. DECLARE the cursor before FETCH/CLOSE.
  2. Keep it in the same transaction — non-holdable cursors close at COMMIT.

Reference: PostgreSQL error codes — Class 34 (Invalid Cursor Name).

Was this helpful?