↑↓ select↵ open⌫ change scopeOpen full search

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

Wiki / SQLSTATE

0B000 — invalid_transaction_initiation

SQLSTATE 0B000 names the SQL-standard Invalid Transaction Initiation class. The locked PostgreSQL 18.6 definition contains the condition, but the resolved core/contrib call scan did not identify a PostgreSQL report group for this code. Treat the class as an identity and investigation starting point, not as proof that a particular BEGIN, savepoint, or client command emits it.

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 Transaction Initiation
condition name
invalid_transaction_initiation
lang
en
sqlstate
0B000

Definition PG 18

0B000

At a glance {#at-a-glance}

SQLSTATE 0B000 names the SQL-standard Invalid Transaction Initiation class. The locked PostgreSQL 18.6 definition contains the condition, but the resolved core/contrib call scan did not identify a PostgreSQL report group for this code. Treat the class as an identity and investigation starting point, not as proof that a particular BEGIN, savepoint, or client command emits it.

Meaning {#meaning}

The class concerns an invalid way to initiate or establish a transaction in an implementation that uses this SQLSTATE. It is distinct from the transaction-state code actually returned by a server. PostgreSQL's catalogue entry alone does not establish whether a current backend path, an extension, an ECPG layer, or a driver would use 0B000 for a given command.

Messages {#messages}

No fixed PostgreSQL message variant was adopted for this condition because the bounded scan did not resolve a native emitting call.

Diagnosis {#diagnosis}

Record the exact SQLSTATE, message type, severity, command phase, and client library before interpreting the name. Check whether the failure occurred during startup, an explicit transaction command, a savepoint operation, or in a wrapper that forwards a remote result. If the observed code is instead 25001 or another transaction-state code, diagnose that code and its server message; do not substitute 0B000 from the class name.

Response {#response}

Follow the actual transaction-state diagnostic: end or repair the invalid transaction command, and use a new transaction only when the server and application state require it. If a wrapper or driver owns the path, inspect its fixed implementation and the remote SQLSTATE before changing transaction handling. The bounded source result provides no basis for a generic retry or a PostgreSQL-native repair recipe for 0B000.

Versions {#versions}

The locked catalogue places this condition at least by PostgreSQL 7.4. The release definitions cover the published snapshots listed in the facts block; source-path status is limited to the fixed PostgreSQL 18.6 context cited below.

Related {#related}

25001, 25P02

Sources {#sources}

The fixed errcodes definition establishes the catalogue row; the transaction-management documentation explains PostgreSQL transaction boundaries. The locked core/contrib call scan found no resolved 0B000 report group. See the structured evidence record for fixed source paths, scan scope, and unresolved runtime boundaries.

Compare versions

SQLSTATE evidence and recorded runtime versions

claims · identity
{
  "claim_id": "identity",
  "limits": "",
  "method": "Read the fixed errcodes definition row, severity, and macro.",
  "position": 0,
  "runtime": [],
  "sources": [
    "src.errcodes.18.6"
  ],
  "statement": "0B000 is invalid_transaction_initiation in SQLSTATE Class 0B."
}
claims · scan-boundary
{
  "claim_id": "scan-boundary",
  "limits": "The scan does not cover external wrappers, drivers, extensions, remote systems, or user code; absence from this scan is not an absolute absence claim.",
  "method": "Compare resolved report groups with the fixed macro mapping.",
  "position": 1,
  "runtime": [],
  "sources": [
    "src.calls.REL_18_6",
    "src.errcodes.18.6"
  ],
  "statement": "No resolved 0B000 report group was found in the locked PostgreSQL 18.6 core/contrib call scan."
}
claims · history-boundary
{
  "claim_id": "history-boundary",
  "limits": "Definition presence is not an emitting-path observation.",
  "method": "Compare canonical release-definition facts with the available history boundary.",
  "position": 2,
  "runtime": [],
  "sources": [
    "src.errcodes.18.6"
  ],
  "statement": "The locked release definitions establish catalogue presence from the known 7.4 boundary; they do not establish a precise introducing release or runtime use."
}
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#L123"
}
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:34b2c22ba9ebe94a180637890d26927d04d33d4c5bdbad335528cfe8ade5ca12

Text language: en · english-manuals:34b2c22ba9ebe94a180637890d26927d04d33d4c5bdbad335528cfe8ade5ca12