# 2B000 — dependent_privilege_descriptors_still_exist

> Source-backed reference for PostgreSQL SQLSTATE 2B000, with explicit mechanism boundaries.
---

# 2B000 — dependent_privilege_descriptors_still_exist

## At a glance {#at-a-glance}

`2B000` is a catalogue-defined condition for dependent privilege descriptors. The fixed source scan did not resolve a distinct core `2B000` ereport path in this batch, so the page records the definition boundary and does not label a role, REVOKE, or DROP result as 2B000. For ordinary object dependencies, see `2BP01`.

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

| Field | Value |
| --- | --- |
| SQLSTATE | `2B000` |
| Condition | `dependent_privilege_descriptors_still_exist` |
| 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_DEPENDENT_PRIVILEGE_DESCRIPTORS_STILL_EXIST` |
| Aliases | `—` |

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

## Meaning {#meaning}

`2B000` names the Class 2B dependent privilege descriptors condition. The fixed PostgreSQL 18.6 call scan did not resolve a distinct core `ereport` for this code. It must therefore remain separate from `2BP01` (dependent objects still exist) and from concrete authorization or grant-operation errors such as `42501` and `0LP01`.

## Diagnosis {#diagnosis}

When this code is reported by an extension or a version-specific path, preserve the object/privilege descriptor named by that component and collect its primary, DETAIL, and HINT fields. Do not infer `2B000` from a failed `DROP` or `GRANT`: the fixed core scan has no selected natural trigger, and the ordinary dependency walker uses `2BP01` for the representative dependent-object path.

## Response {#response}

Do not apply `DROP ... CASCADE`, revoke privileges, or retry solely from the class name. Identify the component that owns the descriptor, use its documented repair, and verify the resulting ACL/dependency state. Until a resolved server path is established, treat this page as a source/definition boundary rather than a promise that a generic SQL transaction can produce `2B000`.

## Versions {#versions}

The locked facts table records catalogue presence across the project snapshot range. The fixed source evidence is limited to the path stated below; no exact behavioral introduction or broader runtime coverage is inferred from the definition alone.

## Related {#related}

Compare [2BP01 dependent objects](../2bp01/) for object dependencies; the two codes are distinct source categories.

## Sources {#sources}

- [`src.errcodes.18.6`](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/utils/errcodes.txt) (SHA-256 `6e8de346643ba84aa3c9c6a73360acfc7b2dfb89162c06c08ce9bf5bcd5bbcba`)
- `src.calls.REL_18_6` fixed call scan (SHA-256 `9ee8a0e81d8f0825c5c1ae45583439859a26e602bdd4ce2f2a62aa278867ccbf`)
