# 25007 — schema_and_data_statement_mixing_not_supported

> PostgreSQL SQLSTATE 25007: the schema/data statement mixing condition and its conservative source boundary.
---

# 25007 — schema_and_data_statement_mixing_not_supported

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

`25007` names a transaction-state condition for mixing schema and data statements. The fixed PostgreSQL 18.6 core scan resolves no direct report group, so this page does not manufacture a SQL example.

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

| Field | Value |
| --- | --- |
| SQLSTATE | `25007` |
| Condition | `schema_and_data_statement_mixing_not_supported` |
| 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_SCHEMA_AND_DATA_STATEMENT_MIXING_NOT_SUPPORTED` |
| Aliases | `—` |

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

## Meaning {#meaning}

The condition name describes a narrow statement-composition boundary. It is not a general replacement for syntax, read-only, or active-transaction errors.

## Diagnosis {#diagnosis}

Keep the protocol or API operation, statement sequence, and exact server SQLSTATE together. The fixed core evidence has no message template to quote and no safe natural case to run.

## Response {#response}

Use the API’s documented statement grouping and separate schema changes from data operations when it requires that boundary. Do not invent a retry or `RAISE` path from the condition name.

## 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](../data/evidence/25007.json) · [case export](../data/cases/25007.json)

## Versions and limits {#versions}

The generated facts record the locked catalogue membership. Both runner targets are `not_applicable` source-boundary cases; no natural runtime coverage is claimed.

## Related {#related}

[25006 read-only SQL transaction](../25006/), [25008 held cursor isolation](../25008/), [25P01 no active SQL transaction](../25p01/).

## 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` — `raw/calls/REL_18_6.jsonl` (SHA-256 `9ee8a0e81d8f0825c5c1ae45583439859a26e602bdd4ce2f2a62aa278867ccbf`)
