# 53000 — insufficient_resources

> Source-backed reference for PostgreSQL SQLSTATE 53000.
---

# 53000

## At a glance {#at-a-glance}
`53000` is the broad insufficient-resources condition. Fixed 18.6 callers include background-worker startup, local-buffer exhaustion, and file-descriptor limits, so the message and startup/runtime phase identify the resource.

<!-- BEGIN SQLSTATE FACTS: generated by scripts/generate.py; do not edit -->

| Field | Value |
| --- | --- |
| SQLSTATE | `53000` |
| Condition | `insufficient_resources` |
| Status | `active` |
| Known present by | `7.4` |
| Locked snapshots | `9.0.23, 9.1.24, 9.2.24, 9.3.25, 9.4.26, 9.5.25, 9.6.24, 10.23, 11.22, 12.22, 13.23, 14.24, 15.19, 16.15, 17.11, 18.6, 19beta3` |
| Macros | `ERRCODE_INSUFFICIENT_RESOURCES` |
| Aliases | `—` |

<!-- source facts: data/errcodes/53000.json -->
<!-- END SQLSTATE FACTS -->

## Meaning {#meaning}
The class-level condition does not identify one tunable. For example, `could not register background process` points to worker capacity, `no empty local buffer available` to local-buffer state, and file-descriptor variants report either startup minimums or a per-process allocation limit.

## Diagnosis {#diagnosis}
Record the primary message, detail/hint, phase, and server log context. For startup, compare process limits and configured worker capacity. For a running command, determine whether the failing object is a local buffer, descriptor, worker slot, or another fixed resource before changing settings.

## Response {#response}
Relieve or increase the specific resource named by the message, within the platform and PostgreSQL limits. Clean up unused descriptors or workers and verify the relevant configuration. If an `ERROR` occurs inside an explicit transaction, use `ROLLBACK` or `ROLLBACK TO SAVEPOINT` before retrying; in autocommit, retry only after the named resource is available. Startup `FATAL` paths such as the server-process descriptor check have no client transaction to recover. Do not apply a generic restart or memory change without identifying the exhausted resource.

## Versions {#versions}
The locked catalogue records this condition from 7.4; cited callers are PostgreSQL 18.6 source. No resource exhaustion was manufactured on a host.

## Related {#related}
[`53400`](../53400/), [`54001`](../54001/), [`53200`](../53200/)

## Sources {#sources}
[`contrib/pg_prewarm/autoprewarm.c#L943-L981`](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/contrib/pg_prewarm/autoprewarm.c#L943)

[`src/backend/storage/buffer/localbuf.c#L270-L272`](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/storage/buffer/localbuf.c#L270)

[`src/backend/storage/file/fd.c#L1072-L1078`](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/storage/file/fd.c#L1072)

The structured [evidence record](../data/evidence/53000.json) records fixed messages and the source/runtime boundary.
