{"record":{"id":"09d172ecd052b520","repo":"risingwavelabs/risingwave","slug":"iceberg-engine-table-only-supports-with-sink-decou","errorCode":null,"errorMessage":"Iceberg engine table only supports with sink decouple, try `set sink_decouple = true` to resolve it","messagePattern":"Iceberg engine table only supports with sink decouple, try `set sink_decouple = true` to resolve it","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/frontend/src/handler/create_table.rs","lineNumber":1906,"sourceCode":"        .read_guard()\n        .get_database_by_id(table.database_id)?\n        .name()\n        .to_owned();\n    let rw_schema_name = session\n        .env()\n        .catalog_reader()\n        .read_guard()\n        .get_schema_by_id(table.database_id, table.schema_id)?\n        .name()\n        .clone();\n    let iceberg_catalog_name = rw_db_name.clone();\n    let iceberg_database_name = rw_schema_name.clone();\n    let iceberg_table_name = table_name.0.last().unwrap().real_value();\n\n    let iceberg_engine_connection: String = session.config().iceberg_engine_connection();\n    let sink_decouple = session.config().sink_decouple();\n    if matches!(sink_decouple, SinkDecouple::Disable) {\n        bail!(\n            \"Iceberg engine table only supports with sink decouple, try `set sink_decouple = true` to resolve it\"\n        );\n    }\n\n    let mut connection_ref = BTreeMap::new();\n    let with_common = if iceberg_engine_connection.is_empty() {\n        bail!(\"to use iceberg engine table, the variable `iceberg_engine_connection` must be set.\");\n    } else {\n        let parts: Vec<&str> = iceberg_engine_connection.split('.').collect();\n        assert_eq!(parts.len(), 2);\n        let connection_catalog =\n            session.get_connection_by_name(Some(parts[0].to_owned()), parts[1])?;\n        if let ConnectionInfo::ConnectionParams(params) = &connection_catalog.info {\n            if params.connection_type == ConnectionType::Iceberg as i32 {\n                // With iceberg engine connection:\n                connection_ref.insert(\n                    \"connection\".to_owned(),\n                    ConnectionRefValue {","sourceCodeStart":1888,"sourceCodeEnd":1924,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/frontend/src/handler/create_table.rs#L1888-L1924","documentation":"`create_iceberg_engine_table` requires the session variable `sink_decouple` to be enabled. Iceberg engine tables write via the decoupled sink pipeline; with SinkDecouple::Disable the internal sink machinery is unavailable, so CREATE TABLE ... CONNECTOR = 'iceberg' is rejected and the user is told to SET sink_decouple = true.","triggerScenarios":"Executing CREATE TABLE with the Iceberg engine connector while the session has sink_decouple disabled (the default in some versions), i.e. matches!(sink_decouple, SinkDecouple::Disable) in create_iceberg_engine_table.","commonSituations":"Fresh sessions/clusters where sink_decouple was never enabled; clusters upgraded to an Iceberg-engine-capable version without updating the config; CI scripts using default session settings.","solutions":["Run `SET sink_decouple = true;` in the session (or add it to the session config) before creating the Iceberg table.","Set sink_decouple = true as a default in risingwave.toml / cluster config so all sessions get it.","Retry the CREATE TABLE after enabling the flag.","If using a shared cluster, ask the admin to enable sink decouple at the system level (ALTER SYSTEM where available) rather than per session."],"exampleFix":"// before\nCREATE TABLE t CONNECTOR = 'iceberg' ...; -- fails when sink_decouple = false\n// after\nSET sink_decouple = true;\nCREATE TABLE t CONNECTOR = 'iceberg' ...;","handlingStrategy":"validation","validationCode":"// Check before creating Iceberg engine tables\nconst res = await client.query('SHOW VARIABLES WHERE name = \\'sink_decouple\\'');\nif (res.rows[0]?.value !== 'true') await client.query('SET sink_decouple = true');","typeGuard":null,"tryCatchPattern":"// Retry once after enabling the flag\ntry {\n  await createIcebergTable();\n} catch (e) {\n  if (String(e).includes('sink decouple')) {\n    await client.query('SET sink_decouple = true');\n    await createIcebergTable();\n  } else throw e;\n}","preventionTips":["Enable sink_decouple = true in your cluster/session bootstrap script when using Iceberg engine tables.","Document the required session variable next to Iceberg DDL templates.","After version upgrades, re-verify config defaults against Iceberg requirements.","Catch this specific message in migration tooling and auto-apply the SET before retrying."],"tags":["iceberg","sink-decouple","session-config","frontend"],"backgroundTag":"feature-not-enabled","analyzedSha":"6469eb736d691e8e9b8a419a57edd6429ca77417","analyzedAt":"2026-09-11T21:06:21.487Z","contentChangedAt":"2026-09-11T21:06:21.487Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}