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
- Switch the connection's meta_store_backend to 'postgres' or 'mysql' and host a real metastore database
- Create a dedicated connection for the Iceberg catalog backed by Postgres/MySQL
- 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
- Host the Iceberg JDBC metastore on Postgres or MySQL
- Do not reuse sqlite/in-memory-backed connections for Iceberg engine tables
- Keep connection definitions in reviewed IaC to avoid ad-hoc edits
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
- adlsgen2.authority_host does not parse as a URL
- adlsgen2.authority_host must not contain a path component
- adlsgen2.authority_host must not contain a query or fragment
- adlsgen2: cannot configure both shared-key auth…
- adlsgen2: service-principal auth requires all three of…
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)