risingwavelabs/risingwave · error

Unsupported meta backend for iceberg engine table

Error message

Unsupported meta backend for iceberg engine table: {}

What it means

Iceberg engine tables in RisingWave only support JDBC-backed catalogs using Postgres or MySQL as the meta store. SQLite, generic SQL, and in-memory backends (accepted by the parser for other uses) are explicitly rejected here.

Solutions

  1. Switch the connection's meta_store_backend to 'postgres' or 'mysql' and host a real metastore database
  2. Create a dedicated connection for the Iceberg catalog backed by Postgres/MySQL
  3. Verify the value casing/format matches what `MetaBackend::from_str` accepts

Example fix

// before
CREATE CONNECTION c WITH (type='iceberg', meta_store_backend='sqlite', ...);
// after
CREATE CONNECTION c WITH (type='iceberg', meta_store_backend='postgres', jdbc_url='jdbc:postgresql://host:5432/iceberg', ...);
Defensive patterns

Strategy: validation

Validate before calling

-- only 'postgres' or 'mysql' are valid for iceberg engine meta stores
SHOW CONNECTIONS;

Prevention

When it happens

Trigger: `CREATE TABLE ... WITH (engine='iceberg')` where the referenced connection's meta_store_backend parses to Sqlite, Sql, or Mem.

Common situations: Pointing the Iceberg connection at an embedded/H2-style or in-memory metastore for local testing; reusing a connection definition built for a different feature; misreading supported metastore docs.

Related errors


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

Appendix: source

Thrown at src/frontend/src/handler/create_table.rs:2001

                    let Ok(meta_backend) = MetaBackend::from_str(&meta_store_backend, true) else {
                        bail!("failed to parse meta backend: {}", meta_store_backend);
                    };

                    let catalog_uri = match meta_backend {
                        MetaBackend::Postgres => {
                            format!(
                                "jdbc:postgresql://{}:{}/{}",
                                meta_store_host, meta_store_port, meta_store_database
                            )
                        }
                        MetaBackend::Mysql => {
                            format!(
                                "jdbc:mysql://{}:{}/{}",
                                meta_store_host, meta_store_port, meta_store_database
                            )
                        }
                        MetaBackend::Sqlite | MetaBackend::Sql | MetaBackend::Mem => {
                            bail!(
                                "Unsupported meta backend for iceberg engine table: {}",
                                meta_store_backend
                            );
                        }
                    };

                    with_common.insert("catalog.type".to_owned(), "jdbc".to_owned());
                    with_common.insert("catalog.uri".to_owned(), catalog_uri);
                    with_common.insert("catalog.jdbc.user".to_owned(), meta_store_user);
                    with_common.insert("catalog.jdbc.password".to_owned(), meta_store_password);
                    with_common.insert("catalog.name".to_owned(), iceberg_catalog_name);
                }

                with_common
            } else {
                return Err(RwError::from(ErrorCode::InvalidParameterValue(
                    "Only iceberg connection could be used in iceberg engine".to_owned(),
                )));

View on GitHub (pinned to 6469eb736d)