risingwavelabs/risingwave · error

ALTER TABLE {} is not supported for iceberg table: {}.{}. Ex

Error message

ALTER TABLE {} is not supported for iceberg table: {}.{}. Existing column schema mutation is not supported currently

What it means

Mutating an existing column's definition (RENAME COLUMN, CHANGE COLUMN, ALTER COLUMN) on an Iceberg table is rejected unconditionally. Iceberg connector schema evolution in RisingWave only supports additive changes (add/drop via an auto-refresh-schema sink); in-place column mutation is not implemented.

Source

Thrown at src/frontend/src/handler/mod.rs:1759

                    schema_name,
                    table_name
                );
            }
        }
        AlterTableOperation::DropColumn { .. } => {
            if !has_auto_refresh_schema_sink {
                bail!(
                    "ALTER TABLE {} is not supported for iceberg table without auto schema change sink: {}.{}",
                    operation,
                    schema_name,
                    table_name
                );
            }
        }
        AlterTableOperation::RenameColumn { .. }
        | AlterTableOperation::ChangeColumn { .. }
        | AlterTableOperation::AlterColumn { .. } => {
            bail!(
                "ALTER TABLE {} is not supported for iceberg table: {}.{}. Existing column schema mutation is not supported currently",
                operation,
                schema_name,
                table_name
            );
        }
        AlterTableOperation::RenameTable { .. } => {
            bail!(
                "ALTER TABLE RENAME is not supported for iceberg table: {}.{}",
                schema_name,
                table_name
            );
        }
        AlterTableOperation::SetParallelism { .. } => {
            bail!(
                "ALTER TABLE SET PARALLELISM is not supported for iceberg table: {}.{}",
                schema_name,
                table_name

View on GitHub (pinned to 6469eb736d)

Solutions

  1. Add a new column with the desired name/type (via ADD COLUMN with an auto-refresh-schema sink), backfill it, then DROP the old column.
  2. Perform the rename/type change directly on the Iceberg side and refresh the RisingWave schema with REFRESH SCHEMA where applicable.
  3. Drop and recreate the table and sink with the corrected schema if feasible.

Example fix

// before
ALTER TABLE t RENAME COLUMN a TO b;
// after
ALTER TABLE t ADD COLUMN b <type>;
-- backfill b from a, then
ALTER TABLE t DROP COLUMN a;
Defensive patterns

Strategy: validation

Validate before calling

-- Never issue RENAME/CHANGE/ALTER COLUMN on iceberg tables
SELECT relation_kind FROM rw_catalog.rw_relations WHERE name = 't';
-- if iceberg-backed, use add-new + backfill + drop-old instead

Type guard

fn is_column_mutation(op: &AlterTableOperation) -> bool {
    matches!(op,
        AlterTableOperation::RenameColumn {..}
        | AlterTableOperation::ChangeColumn {..}
        | AlterTableOperation::AlterColumn {..})
}

Try / catch

match client.alter_table(op).await {
    Err(e) if e.message().contains("Existing column schema mutation is not supported") => {
        // fall back to add-new-column + drop-old workflow
    }
    other => other?,
}

Prevention

When it happens

Trigger: Executing `ALTER TABLE <iceberg_table> RENAME COLUMN ...`, `CHANGE COLUMN ...`, or `ALTER COLUMN ...` on any Iceberg-backed table, regardless of sink settings.

Common situations: Renaming a misnamed column or widening its type on an Iceberg table; porting Postgres ALTER TABLE habits to Iceberg-backed tables.

Related errors


AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11). Data as JSON: /api/errors/4d9697ca92e1a575. Report an issue: GitHub.