---
title: "Important: #110422 - Index definitions are checked against the table"
manual: "TYPO3 Core Changelog"
version: "main"
permalink: "https://docs.typo3.org/permalink/changelog:important-110422-1786292528"
source: "Changelog/13.4.x/Important-110422-IndexDefinitionsCheckedAgainstTable.rst"
typo3-version: "13.4.x"
typo3-major: 13
type: "important"
issue: 110422
forge: "https://forge.typo3.org/issues/110422"
tags: ["Database", "ext_tables.sql", "NotScanned", "ext:core"]
rendered: "2026-09-24T21:45:06+00:00"
---

# Important: #110422 - Index definitions are checked against the table {#important-110422-1786292528}

See [forge#110422](https://forge.typo3.org/issues/110422)

## Description {#description}

A `ext_tables.sql` table definition that puts an index on a column the
table does not declare is invalid. It is usually a typo, or a column that was
removed while the index over it stayed behind.

MySQL and PostgreSQL reject such an index themselves, so the update failed with
a database error there. SQLite accepts it: a quoted identifier that matches no
column counts as a string literal, so the index is created over a constant
expression and covers no column at all. A database in that state can no longer
be introspected, which stops the schema analysis of the install tool and of the
command line alike, and leaves no way to bring the database back into shape.

Index columns are therefore checked against the table before anything is
applied, and an index over a column the table does not have is reported as an
invalid definition:

```text
[Semantic Error] Index "sorting" of table "tx_myext_item" is defined over
column "sorting_value", which the table does not have.
```

The check runs on the merged definition of a table, not on a single statement,
so extensions can keep adding an index to a table of another extension in a
statement of their own that only carries the index.

## Impact {#impact}

An extension shipping such a definition made the schema update fail before, on
every platform except SQLite, where it damaged the database instead. It is now
reported as what it is, naming the table, the index and the column, and nothing
is applied until it is corrected.
