{"record":{"id":"bc053146abfb3570","repo":"dbt-labs/dbt-core","slug":"postgresadapter-list-relations-schemas-by-pattern","errorCode":null,"errorMessage":"PostgresAdapter::list_relations_schemas_by_patterns","messagePattern":"PostgresAdapter::list_relations_schemas_by_patterns","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/dbt-adapter/src/metadata/postgres/mod.rs","lineNumber":166,"sourceCode":"    }\n\n    fn list_relations_schemas_inner(\n        &self,\n        _unique_id: Option<String>,\n        _phase: Option<ExecutionPhase>,\n        _relations: &[Arc<dyn BaseRelation>],\n        _token: CancellationToken,\n    ) -> AsyncAdapterResult<'_, HashMap<String, AdapterResult<Arc<Schema>>>> {\n        let future = async move { todo!(\"PostgreSQL's list_relations_schemas\") };\n        Box::pin(future)\n    }\n\n    fn list_relations_schemas_by_patterns_inner(\n        &self,\n        _patterns: &[RelationPattern],\n        _token: CancellationToken,\n    ) -> AsyncAdapterResult<'_, Vec<(String, AdapterResult<RelationSchemaPair>)>> {\n        todo!(\"PostgresAdapter::list_relations_schemas_by_patterns\")\n    }\n\n    fn freshness_inner(\n        &self,\n        _relations: &[Arc<dyn BaseRelation>],\n        _token: CancellationToken,\n    ) -> AsyncAdapterResult<'_, BTreeMap<String, MetadataFreshness>> {\n        todo!(\"PostgresAdapter::freshness\")\n    }\n\n    fn create_schemas_if_not_exists(\n        &self,\n        state: &State<'_, '_>,\n        catalog_schemas: Vec<(String, String, String)>,\n    ) -> AdapterResult<Vec<(String, String, String, AdapterResult<()>)>> {\n        create_schemas_if_not_exists(&self.adapter, self, state, catalog_schemas)\n    }\n","sourceCodeStart":148,"sourceCodeEnd":184,"githubUrl":"https://github.com/dbt-labs/dbt-core/blob/0267ce9170576975b76b64ce856b2e5848e96617/crates/dbt-adapter/src/metadata/postgres/mod.rs#L148-L184","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","solutions":["Enumerate relations without pattern filtering (use implemented list endpoints) and filter client-side","Implement list_relations_schemas_by_patterns_inner, translating patterns to LIKE/regex predicates over INFORMATION_SCHEMA.TABLES","Upgrade/pin to a dbt-adapter version where the pattern API is implemented for Postgres","Reject pattern-based selection on Postgres early with a clear unsupported-feature message"],"exampleFix":"// before\nfn list_relations_schemas_by_patterns_inner(&self, _patterns: &[RelationPattern], _token: CancellationToken) -> ... {\n    todo!(\"PostgresAdapter::list_relations_schemas_by_patterns\")\n}\n// after\nfn list_relations_schemas_by_patterns_inner(&self, patterns: &[RelationPattern], token: CancellationToken) -> ... {\n    self.run_pattern_queries(conn, patterns, token)\n}","handlingStrategy":"fallback","validationCode":"if patterns.is_empty() {\n    // skip pattern API entirely; use full listing\n    return list_all_schemas(adapter).await;\n}\nif !adapter.capabilities().patterns_supported {\n    return Err(\"pattern-based schema listing unsupported on Postgres\".into());\n}","typeGuard":"fn patterns_supported(a: &dyn Adapter) -> bool { a.capabilities().list_relations_schemas_by_patterns }","tryCatchPattern":"match adapter.list_relations_schemas_by_patterns(patterns, token).await {\n    Ok(res) => res,\n    Err(_) | Panic => list_all_and_filter_locally(patterns).await,\n}","preventionTips":["Prefer client-side filtering of a full relation listing over pattern APIs when support is unclear","Check adapter capability flags before pattern-based selection","Keep a documented fallback for unimplemented trait methods","Add integration tests that exercise pattern endpoints per adapter"],"tags":["rust","todo-panic","postgres","unimplemented"],"backgroundTag":"method-not-implemented","analyzedSha":"0267ce9170576975b76b64ce856b2e5848e96617","analyzedAt":"2026-09-07T21:53:39.732Z","contentChangedAt":"2026-09-07T21:53:39.732Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}