↑↓ select↵ open⌫ change scopeOpen full search

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

Wiki / SQLSTATE

25004 — inappropriate_isolation_level_for_branch_transaction

25004 names an inappropriate isolation level for a branch transaction. The fixed PostgreSQL 18.6 resolved-call scan has no direct report group for this code, so no ordinary SQL reproduction is claimed.

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 State
condition name
inappropriate_isolation_level_for_branch_transaction
lang
en
sqlstate
25004

Definition PG 18

25004 — inappropriate_isolation_level_for_branch_transaction

At a glance {#at-a-glance}

25004 names an inappropriate isolation level for a branch transaction. The fixed PostgreSQL 18.6 resolved-call scan has no direct report group for this code, so no ordinary SQL reproduction is claimed.

Meaning {#meaning}

This is a branch-transaction condition, separate from 40001 serialization failure and from the normal SET TRANSACTION ISOLATION LEVEL checks documented for an ordinary transaction.

Diagnosis {#diagnosis}

Keep the branch API, requested isolation level, and transaction state together when diagnosing it. The source evidence does not justify borrowing a message from another isolation-level error.

Response {#response}

Correct the isolation-level negotiation in the branch API, then retry only if that API defines retry semantics. An ordinary SQL session should be diagnosed with the SQLSTATE it actually returned.

Source message and runtime boundary {#messages}

The fixed errcodes.txt row defines the condition and macro; the resolved call scan in raw/calls/REL_18_6.jsonl contains no direct report group, so this batch publishes no message template and constructs no natural SQL trigger.

Applicability boundary and case {#case}

The selected runner cases on PostgreSQL 18.6 and 10.21 are not_applicable; they record the source boundary and contain no copyable SQL trigger. Structured evidence · case export

Versions and limits {#versions}

The generated facts record the locked catalogue snapshots. Both runner targets are source-boundary observations with not_applicable case status; no natural trigger is being promoted to runtime coverage.

Related {#related}

25003 branch transaction access mode, 40001 serialization failure, 25P01 no active SQL transaction.

Sources {#sources}

  • src.errcodes.18.6 (SHA-256 6e8de346643ba84aa3c9c6a73360acfc7b2dfb89162c06c08ce9bf5bcd5bbcba)
  • src.calls.REL_18_6 — raw/calls/REL_18_6.jsonl (SHA-256 9ee8a0e81d8f0825c5c1ae45583439859a26e602bdd4ce2f2a62aa278867ccbf)

Compare versions

SQLSTATE evidence and recorded runtime versions

cases · branch_transaction_boundary
{
  "assertions": [
    "No fabricated SQL trigger is included; the selected run records a definition/source boundary."
  ],
  "case_id": "branch_transaction_boundary",
  "cleanup": "Drop the case schema with an owner connection.",
  "has_snippet": false,
  "position": 0,
  "preconditions": [
    "A runner-owned disposable target is provisioned."
  ],
  "repair": "Follow the explicit transaction or source boundary described by the case.",
  "trigger": "Source/definition evidence only; no natural SQL trigger is claimed.",
  "versions": [
    "10",
    "18"
  ]
}
claims · identity
{
  "claim_id": "identity",
  "limits": "The condition name alone does not identify a supported ordinary-SQL trigger.",
  "method": "Read the fixed condition row and macro.",
  "position": 0,
  "runtime": [],
  "sources": [
    "src.errcodes.18.6"
  ],
  "statement": "25004 is inappropriate_isolation_level_for_branch_transaction in Class 25."
}
claims · source-boundary
{
  "claim_id": "source-boundary",
  "limits": "Do not substitute a different isolation-level error or a hand-written RAISE example.",
  "method": "Scan fixed source call records for SQLSTATE 25004.",
  "position": 1,
  "runtime": [],
  "sources": [
    "src.calls.REL_18_6"
  ],
  "statement": "The exhaustive resolved PostgreSQL 18.6 call scan contains no direct 25004 report group; no natural SQL reproduction is claimed."
}
runtimes · runtime.25004-batch2-latest-20260909.latest · 18.6 (Homebrew) · not_applicable
{
  "cases": [
    "branch_transaction_boundary"
  ],
  "limits": "",
  "position": 0,
  "raw": {
    "case_manifest": {
      "path": "verify/cases/25004/cases.json",
      "sha256": "6e616ecb1ea8026eef7515be693af96fad4452d1a1ad804a504546491178e206"
    },
    "case_status": "not_applicable",
    "cases": [
      "branch_transaction_boundary"
    ],
    "id": "runtime.25004-batch2-latest-20260909.latest",
    "observed": {
      "case_status": "not_applicable"
    },
    "raw": "verify/results/25004-batch2-latest-20260909/latest/raw.jsonl",
    "raw_sha256": "f0d2933f7323aca4846fa9d962b2bff160db9f8c65cb430f6c4f41662203eafc",
    "run_id": "25004-batch2-latest-20260909",
    "server_version": "18.6 (Homebrew)",
    "server_version_num": 180006,
    "status": "not_applicable",
    "summary": "verify/results/25004-batch2-latest-20260909/latest/summary.json",
    "summary_sha256": "6e892b767ad9feef596f0533e1b72620dd5c5e47cfef320c8ace0cfedffa3e7d",
    "target": "latest",
    "target_status": "passed"
  },
  "run_id": "25004-batch2-latest-20260909",
  "runtime_id": "runtime.25004-batch2-latest-20260909.latest",
  "server_version": "18.6 (Homebrew)",
  "status": "not_applicable",
  "target": "latest"
}
runtimes · runtime.25004-batch2-pg10-20260909.pg10 · 10.21 (Debian 10.21-1.pgdg90+1) · not_applicable
{
  "cases": [
    "branch_transaction_boundary"
  ],
  "limits": "",
  "position": 1,
  "raw": {
    "case_manifest": {
      "path": "verify/cases/25004/cases.json",
      "sha256": "6e616ecb1ea8026eef7515be693af96fad4452d1a1ad804a504546491178e206"
    },
    "case_status": "not_applicable",
    "cases": [
      "branch_transaction_boundary"
    ],
    "id": "runtime.25004-batch2-pg10-20260909.pg10",
    "observed": {
      "case_status": "not_applicable"
    },
    "raw": "verify/results/25004-batch2-pg10-20260909/pg10/raw.jsonl",
    "raw_sha256": "f956881ba6ff4cc6f036e014e518813fffccb61a6044710a8d1a12d3fe44e8b2",
    "run_id": "25004-batch2-pg10-20260909",
    "server_version": "10.21 (Debian 10.21-1.pgdg90+1)",
    "server_version_num": 100021,
    "status": "not_applicable",
    "summary": "verify/results/25004-batch2-pg10-20260909/pg10/summary.json",
    "summary_sha256": "aec6940d7ab31fd4a9e0fdd6639119dba287bada8c3195ab9e621e0a57bf8e1b",
    "target": "pg10",
    "target_status": "passed"
  },
  "run_id": "25004-batch2-pg10-20260909",
  "runtime_id": "runtime.25004-batch2-pg10-20260909.pg10",
  "server_version": "10.21 (Debian 10.21-1.pgdg90+1)",
  "status": "not_applicable",
  "target": "pg10"
}
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:ff3d8caa9aef4c97400e28e05ddec460333e1dcaefb43ffab988dd40b8df85f9

Text language: en · english-manuals:ff3d8caa9aef4c97400e28e05ddec460333e1dcaefb43ffab988dd40b8df85f9