Details
-
Task
-
Status: Closed (View Workflow)
-
Major
-
Resolution: Fixed
-
None
Description
The manual warns that altering system-versioned tables is not supported, as we can read here:
https://mariadb.com/kb/en/library/system-versioned-tables/#system_versioning_alter_history
Description: SQL:2011 does not allow ALTER TABLE on system-versioned tables. When this variable is set to ERROR, an attempt to alter a system-versioned table will result in an error. When this variable is set to KEEP, ALTER TABLE will be allowed, but the history will become incorrect — querying historical data will show the new table structure. This mode is still useful, for example, when adding new columns to a table
It would be useful to support adding or dropping columns without breaking the history.
There is one case where the Master has a table T1 which is verioned on the Slave. if you add a column on the Master the replication either breaks or the history on the Slave's table becomes unpredictable, depending on the value of `system_versioning_alter_history`.
With this feature request I want to check the possibility of fully supporting relatively unharmful DDLs for system versioned tables.
To do that one key element is to always keep the hidden timestamp field of system versioned table as last in the row.
There are several challenges to implement this, for example the need of keeping one version of each table if the structure changes, or how to flag/hide columns that don't exist at a certain point in time.