↑↓ select↵ open⌫ change scopeOpen full search

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

Wiki / SQLSTATE

0L000 — invalid_grantor

SQLSTATE 0L000 is invalid_grantor in Class 0L. The fixed aclparse path uses it as a backward-compatible warning when old ACL item text omits the /grantor suffix: it defaults the grantor to BOOTSTRAP_SUPERUSERID. This is ACL text parsing, not a bootstrap or ACL-initialization phase and not the ordinary “permission denied” or invalid GRANT-operation path.

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
Invalid Grantor
condition name
invalid_grantor
lang
en
sqlstate
0L000

Definition PG 18

0L000

At a glance {#at-a-glance}

SQLSTATE 0L000 is invalid_grantor in Class 0L. The fixed aclparse path uses it as a backward-compatible warning when old ACL item text omits the /grantor suffix: it defaults the grantor to BOOTSTRAP_SUPERUSERID. This is ACL text parsing, not a bootstrap or ACL-initialization phase and not the ordinary “permission denied” or invalid GRANT-operation path.

Meaning {#meaning}

0L000 is invalid_grantor. In aclparse, an ACL item without a /grantor suffix takes a backward-compatibility fallback: the parser sets the grantor to BOOTSTRAP_SUPERUSERID and emits WARNING with SQLSTATE 0L000. This can occur while parsing ordinary ACL text; it does not identify bootstrap initialization. If a slash is present but no name follows it, the same parser instead raises 22P02 with a name must follow the "/" sign.

Diagnosis {#diagnosis}

If this warning appears, inspect the ACL text being parsed and whether it contains a grantor suffix. A missing slash and an empty name after a slash are different inputs: the first takes the 0L000 compatibility warning, while the second takes 22P02. A normal GRANT statement should be diagnosed with its concrete privilege or object error, such as 0LP01 or 42501.

Response {#response}

Preserve or rewrite serialized ACL text with an explicit valid grantor when the text is under your control, then review the resulting ACLs. Do not treat the warning as proof that bootstrap initialization failed. This page records the source path only; no natural SQL trigger is selected for 0L000.

Messages {#messages}

The fixed omitted-grantor branch emits WARNING with 0L000 and primary defaulting grantor to user ID %u; the numeric user ID is dynamic. The adjacent slash-without-name branch emits ERROR with 22P02 and primary a name must follow the "/" sign. A client exception without the server diagnostic is not proof of 0L000.

Representative case {#case}

This page has no selected natural SQL run. The structured evidence records a source or definition boundary; a client-side RAISE would not represent a backend mechanism.

Versions {#versions}

The generated facts table records the locked catalogue snapshots and earliest observed definition. This page has no selected natural SQL run; the fixed REL_18_6/REL_10_23 aclparse source comparison must not be read as an observed runtime result or as a claim about every intermediate release.

Related {#related}

Sources {#sources}

  • src.aclparse-grantor-fallback.18.6 — src/backend/utils/adt/acl.c at REL_18_6 commit 724edf9bde9d356724ad384a2e196edc3c9f80f7; fixed blob SHA-256 623f2dd01c1d393d3b224c7622dc2ec946faced444c1f5fd5e396e037903a5b0 (source). This is the aclparse omitted-grantor compatibility branch.
  • src.aclparse-grantor-fallback.10.23 — src/backend/utils/adt/acl.c at REL_10_23 commit 02991e79f8f58bc208f05dcc8af0c62dbe0a6ea4; fixed blob SHA-256 3cfe29c06d211130552d2aab88f61dcdd9a5287c9ab8c450d48562056b32829e (source). This is the aclparse omitted-grantor compatibility branch.
  • src.aclparse-slash-missing-name.10.23 — the same fixed acl.c blob, lines 338–344, records the separate 22P02 branch when / is followed by no name (source).
  • src.calls.REL_18_6 / src.calls.REL_10_23 — fixed local call scans, SHA-256 9ee8a0e81d8f0825c5c1ae45583439859a26e602bdd4ce2f2a62aa278867ccbf / 00d16d3eb01b71ccf1b245c8f3102f9d0ec9f36fb02777b8dd1b99fcb263040c; these scans preserve the resolved call context used by the claims.

Compare versions

SQLSTATE evidence and recorded runtime versions

cases · source_boundary
{
  "assertions": [],
  "case_id": "source_boundary",
  "cleanup": "Drop the case schema with an owner connection.",
  "has_snippet": false,
  "position": 0,
  "preconditions": [
    "A runner-owned disposable target is provisioned only if a source-boundary smoke run is requested."
  ],
  "repair": "Use the concrete source path or component-specific documentation when it applies.",
  "trigger": "No artificial SQL trigger is executed; this record preserves the fixed source/definition boundary.",
  "versions": [
    "10",
    "18"
  ]
}
claims · identity.class-and-condition
{
  "claim_id": "identity.class-and-condition",
  "limits": "Directory identity does not identify every backend or client path.",
  "method": "Read the fixed errcodes.txt definition and the locked catalogue metadata.",
  "position": 0,
  "runtime": [],
  "sources": [
    "src.errcodes.18.6"
  ],
  "statement": "0L000 is the invalid_grantor condition in Class 0L."
}
claims · mechanism.source-boundary
{
  "claim_id": "mechanism.source-boundary",
  "limits": "This is a bounded source claim; no natural SQLSTATE case was selected, and the warning's numeric user ID is dynamic.",
  "method": "Read the complete fixed aclparse branch in REL_18_6 and REL_10_23, including the slash-without-name error branch and the omitted-grantor fallback.",
  "position": 1,
  "runtime": [],
  "sources": [
    "src.aclparse-grantor-fallback.18.6",
    "src.aclparse-grantor-fallback.10.23",
    "src.aclparse-slash-missing-name.10.23"
  ],
  "statement": "The fixed aclparse path accepts ACL item text without a /grantor suffix for backward compatibility, defaults the grantor to BOOTSTRAP_SUPERUSERID, and emits WARNING 0L000. If a slash is present but no name follows it, the parser instead emits 22P02; this is ACL text parsing rather than bootstrap or ACL initialization and is not an ordinary GRANT failure."
}
claims · versions.catalogue-boundary
{
  "claim_id": "versions.catalogue-boundary",
  "limits": "Presence in a definition file is not an exact behavioral introduction, and the fixed source paths do not prove every intermediate release.",
  "method": "Read the generated facts block and fixed aclparse source records; no runtime result is used for this source-only page.",
  "position": 2,
  "runtime": [],
  "sources": [
    "src.errcodes.18.6",
    "src.aclparse-grantor-fallback.18.6",
    "src.aclparse-grantor-fallback.10.23"
  ],
  "statement": "The locked catalogue records 0L000 in the listed snapshots; this page compares only the fixed REL_18_6 and REL_10_23 aclparse source paths and has no selected natural runtime."
}
messages · message.aclparse-grantor-fallback
{
  "limits": "The %u value is BOOTSTRAP_SUPERUSERID in the fixed fallback branch; this message is emitted for ACL text without a /grantor suffix.",
  "message_id": "message.aclparse-grantor-fallback",
  "path": "",
  "position": 0,
  "raw": {
    "id": "message.aclparse-grantor-fallback",
    "limits": "The %u value is BOOTSTRAP_SUPERUSERID in the fixed fallback branch; this message is emitted for ACL text without a /grantor suffix.",
    "primary_template": "defaulting grantor to user ID %u",
    "severity_source": "explicit WARNING",
    "sources": [
      "src.aclparse-grantor-fallback.18.6",
      "src.aclparse-grantor-fallback.10.23"
    ],
    "sqlstate": "0L000"
  },
  "severity": "explicit WARNING",
  "sources": [
    "src.aclparse-grantor-fallback.18.6",
    "src.aclparse-grantor-fallback.10.23"
  ],
  "templates": [
    {
      "kind": "primary",
      "literal": "defaulting grantor to user ID",
      "position": 0,
      "role": "",
      "template": "defaulting grantor to user ID %u"
    }
  ]
}
messages · message.aclparse-slash-missing-name
{
  "limits": "",
  "message_id": "message.aclparse-slash-missing-name",
  "path": "",
  "position": 1,
  "raw": {
    "id": "message.aclparse-slash-missing-name",
    "primary_template": "a name must follow the \"/\" sign",
    "severity_source": "explicit ERROR",
    "sources": [
      "src.aclparse-slash-missing-name.10.23"
    ],
    "sqlstate": "22P02"
  },
  "severity": "explicit ERROR",
  "sources": [
    "src.aclparse-slash-missing-name.10.23"
  ],
  "templates": [
    {
      "kind": "primary",
      "literal": "a name must follow the \"/\" sign",
      "position": 0,
      "role": "",
      "template": "a name must follow the \"/\" sign"
    }
  ]
}
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": "REL_18_6",
  "url": ""
}
sources · src.calls.REL_10_23
{
  "commit": "",
  "docs_url": "",
  "kind": "local_artifact",
  "location": "",
  "path": "raw/calls/REL_10_23.jsonl",
  "position": 2,
  "sha256": "00d16d3eb01b71ccf1b245c8f3102f9d0ec9f36fb02777b8dd1b99fcb263040c",
  "source_id": "src.calls.REL_10_23",
  "tag": "REL_10_23",
  "url": ""
}
sources · src.aclparse-grantor-fallback.18.6
{
  "commit": "724edf9bde9d356724ad384a2e196edc3c9f80f7",
  "docs_url": "",
  "kind": "upstream_source",
  "location": "",
  "path": "src/backend/utils/adt/acl.c",
  "position": 3,
  "sha256": "623f2dd01c1d393d3b224c7622dc2ec946faced444c1f5fd5e396e037903a5b0",
  "source_id": "src.aclparse-grantor-fallback.18.6",
  "tag": "REL_18_6",
  "url": "https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/utils/adt/acl.c#L408-L411"
}
sources · src.aclparse-grantor-fallback.10.23
{
  "commit": "02991e79f8f58bc208f05dcc8af0c62dbe0a6ea4",
  "docs_url": "",
  "kind": "upstream_source",
  "location": "",
  "path": "src/backend/utils/adt/acl.c",
  "position": 4,
  "sha256": "3cfe29c06d211130552d2aab88f61dcdd9a5287c9ab8c450d48562056b32829e",
  "source_id": "src.aclparse-grantor-fallback.10.23",
  "tag": "REL_10_23",
  "url": "https://github.com/postgres/postgres/blob/02991e79f8f58bc208f05dcc8af0c62dbe0a6ea4/src/backend/utils/adt/acl.c#L350-L353"
}
sources · src.aclparse-slash-missing-name.10.23
{
  "commit": "02991e79f8f58bc208f05dcc8af0c62dbe0a6ea4",
  "docs_url": "",
  "kind": "upstream_source",
  "location": "",
  "path": "src/backend/utils/adt/acl.c",
  "position": 5,
  "sha256": "3cfe29c06d211130552d2aab88f61dcdd9a5287c9ab8c450d48562056b32829e",
  "source_id": "src.aclparse-slash-missing-name.10.23",
  "tag": "REL_10_23",
  "url": "https://github.com/postgres/postgres/blob/02991e79f8f58bc208f05dcc8af0c62dbe0a6ea4/src/backend/utils/adt/acl.c#L338-L344"
}
sources · manifest.0L000
{
  "commit": "",
  "docs_url": "",
  "kind": "local_artifact",
  "location": "",
  "path": "verify/cases/0L000/cases.json",
  "position": 6,
  "sha256": "1c88601f15fe25f7ae25c1da2379a28f1f4508e15e5124eb66c6a9291d05cfcb",
  "source_id": "manifest.0L000",
  "tag": "workspace",
  "url": "verify/cases/0L000/cases.json"
}

Source references

Full definition and evidence JSON

Definition sources

center · PostgreSQL 18 · english-manuals:f03008aefdff0b606794420b0e00c98c863e55143667d8e1e98c2ac47708f5ee

Text language: en · english-manuals:f03008aefdff0b606794420b0e00c98c863e55143667d8e1e98c2ac47708f5ee