dbt-labs/dbt-core · error

PostgresAdapter::list_relations_schemas_by_patterns

Error message

PostgresAdapter::list_relations_schemas_by_patterns

What it means

This is a Rust `todo!()` panic: `PostgresAdapter::list_relations_schemas_by_patterns_inner` is an unimplemented trait method, so requesting relation schemas by name patterns on Postgres panics with 'PostgresAdapter::list_relations_schemas_by_patterns'. It is a placeholder for a pattern-matching batch lookup that was never written.

Source

Thrown at crates/dbt-adapter/src/metadata/postgres/mod.rs:166

    }

    fn list_relations_schemas_inner(
        &self,
        _unique_id: Option<String>,
        _phase: Option<ExecutionPhase>,
        _relations: &[Arc<dyn BaseRelation>],
        _token: CancellationToken,
    ) -> AsyncAdapterResult<'_, HashMap<String, AdapterResult<Arc<Schema>>>> {
        let future = async move { todo!("PostgreSQL's list_relations_schemas") };
        Box::pin(future)
    }

    fn list_relations_schemas_by_patterns_inner(
        &self,
        _patterns: &[RelationPattern],
        _token: CancellationToken,
    ) -> AsyncAdapterResult<'_, Vec<(String, AdapterResult<RelationSchemaPair>)>> {
        todo!("PostgresAdapter::list_relations_schemas_by_patterns")
    }

    fn freshness_inner(
        &self,
        _relations: &[Arc<dyn BaseRelation>],
        _token: CancellationToken,
    ) -> AsyncAdapterResult<'_, BTreeMap<String, MetadataFreshness>> {
        todo!("PostgresAdapter::freshness")
    }

    fn create_schemas_if_not_exists(
        &self,
        state: &State<'_, '_>,
        catalog_schemas: Vec<(String, String, String)>,
    ) -> AdapterResult<Vec<(String, String, String, AdapterResult<()>)>> {
        create_schemas_if_not_exists(&self.adapter, self, state, catalog_schemas)
    }

View on GitHub (pinned to 0267ce9170)

Solutions

  1. Enumerate relations without pattern filtering (use implemented list endpoints) and filter client-side
  2. Implement list_relations_schemas_by_patterns_inner, translating patterns to LIKE/regex predicates over INFORMATION_SCHEMA.TABLES
  3. Upgrade/pin to a dbt-adapter version where the pattern API is implemented for Postgres
  4. Reject pattern-based selection on Postgres early with a clear unsupported-feature message

Example fix

// before
fn list_relations_schemas_by_patterns_inner(&self, _patterns: &[RelationPattern], _token: CancellationToken) -> ... {
    todo!("PostgresAdapter::list_relations_schemas_by_patterns")
}
// after
fn list_relations_schemas_by_patterns_inner(&self, patterns: &[RelationPattern], token: CancellationToken) -> ... {
    self.run_pattern_queries(conn, patterns, token)
}
Defensive patterns

Strategy: fallback

Validate before calling

if patterns.is_empty() {
    // skip pattern API entirely; use full listing
    return list_all_schemas(adapter).await;
}
if !adapter.capabilities().patterns_supported {
    return Err("pattern-based schema listing unsupported on Postgres".into());
}

Type guard

fn patterns_supported(a: &dyn Adapter) -> bool { a.capabilities().list_relations_schemas_by_patterns }

Try / catch

match adapter.list_relations_schemas_by_patterns(patterns, token).await {
    Ok(res) => res,
    Err(_) | Panic => list_all_and_filter_locally(patterns).await,
}

Prevention

When it happens

Trigger: Calling list_relations_schemas_by_patterns with glob/regex `RelationPattern` inputs on a PostgresAdapter; the stub at crates/dbt-adapter/src/metadata/postgres/mod.rs:166 panics immediately.

Common situations: dbt selectors or partial-run features that resolve relations by pattern (e.g. 'staging.*' patterns) against Postgres before the pattern-based API is implemented; any pattern-resolution path panics regardless of DB state.

Related errors


AI-assisted analysis of dbt-labs/dbt-core@0267ce9170 (2026-09-07). Data as JSON: /api/errors/bc053146abfb3570. Report an issue: GitHub.