↑↓ select↵ open⌫ change scopeOpen full search

PG.CENTER connects PostgreSQL documentation, reference, and ecosystem knowledge. Maintained by Pigsty.

Wiki / SQLSTATE

2B000 — dependent_privilege_descriptors_still_exist

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.

English manual coverage begins with PostgreSQL 8.1. Source history and runtime observations have their own recorded version boundaries.

Reading PG 18·Select a recorded version

aliases
Unknown
class name
Dependent Privilege Descriptors Still Exist
condition name
dependent_privilege_descriptors_still_exist
lang
en
sqlstate
2B000

Definition PG 18

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.

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 for object dependencies; the two codes are distinct source categories.

Sources {#sources}

  • src.errcodes.18.6 (SHA-256 6e8de346643ba84aa3c9c6a73360acfc7b2dfb89162c06c08ce9bf5bcd5bbcba)
  • src.calls.REL_18_6 fixed call scan (SHA-256 9ee8a0e81d8f0825c5c1ae45583439859a26e602bdd4ce2f2a62aa278867ccbf)

Compare versions

SQLSTATE evidence and recorded runtime versions

cases · dependent_privilege_boundary
{
  "assertions": [],
  "case_id": "dependent_privilege_boundary",
  "cleanup": "Drop the case schema with an owner connection.",
  "has_snippet": false,
  "position": 0,
  "preconditions": [
    "A runner-owned disposable target is provisioned."
  ],
  "repair": "Inspect dependent privileges and choose an explicit revoke/ownership operation; do not relabel a dependent-object DROP as 2B000.",
  "trigger": "No artificial privilege-revocation case is executed.",
  "versions": [
    "10",
    "18"
  ]
}
claims · identity
{
  "claim_id": "identity",
  "limits": "This records the protocol definition and does not imply a natural PostgreSQL throw path.",
  "method": "Read the fixed errcodes.txt row and macro mapping.",
  "position": 0,
  "runtime": [],
  "sources": [
    "src.errcodes.18.6"
  ],
  "statement": "2B000 is the dependent_privilege_descriptors_still_exist condition in Class 2B."
}
claims · no-safe-natural-case
{
  "claim_id": "no-safe-natural-case",
  "limits": "This is a bounded source/definition result, not proof that every extension or injected fault cannot emit the code.",
  "method": "Review the fixed call scan for resolved 2B000 call groups and reject artificial RAISE or relabeling.",
  "position": 1,
  "runtime": [],
  "sources": [
    "src.calls.REL_18_6"
  ],
  "statement": "No distinct safe natural core runtime case for 2B000 was selected from the fixed call scan."
}
sources · src.errcodes.18.6
{
  "commit": "724edf9bde9d356724ad384a2e196edc3c9f80f7",
  "docs_url": "",
  "kind": "upstream_source",
  "location": "",
  "path": "src/backend/utils/errcodes.txt",
  "position": 0,
  "sha256": "6e8de346643ba84aa3c9c6a73360acfc7b2dfb89162c06c08ce9bf5bcd5bbcba",
  "source_id": "src.errcodes.18.6",
  "tag": "REL_18_6",
  "url": "https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/utils/errcodes.txt"
}
sources · src.calls.REL_18_6
{
  "commit": "",
  "docs_url": "",
  "kind": "local_artifact",
  "location": "",
  "path": "raw/calls/REL_18_6.jsonl",
  "position": 1,
  "sha256": "9ee8a0e81d8f0825c5c1ae45583439859a26e602bdd4ce2f2a62aa278867ccbf",
  "source_id": "src.calls.REL_18_6",
  "tag": "",
  "url": ""
}

Source references

Full definition and evidence JSON

Definition sources

center · PostgreSQL 18 · english-manuals:e6deaa8718adb16adf2c749e75e6bfe1c240b6ee9c98479cb900d220e78efd3d

Text language: en · english-manuals:e6deaa8718adb16adf2c749e75e6bfe1c240b6ee9c98479cb900d220e78efd3d