{"record":{"id":"4a52d96bec2b4f7d","repo":"bytebase/bytebase","slug":"failed-to-get-schema-list-for-catalog-s","errorCode":null,"errorMessage":"failed to get schema list for catalog %s","messagePattern":"failed to get schema list for catalog (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"backend/plugin/db/trino/sync.go","lineNumber":48,"sourceCode":"\t}\n\n\treturn &db.InstanceMetadata{\n\t\tVersion:   version,\n\t\tDatabases: catalogMetadata,\n\t\tMetadata:  &storepb.Instance{},\n\t}, nil\n}\n\n// SyncDBSchema syncs a single database schema.\nfunc (d *Driver) SyncDBSchema(ctx context.Context) (*storepb.DatabaseSchemaMetadata, error) {\n\tcatalog := d.databaseName\n\tdbMeta := &storepb.DatabaseSchemaMetadata{\n\t\tName: catalog,\n\t}\n\n\tschemaNames, err := d.getSchemaList(ctx)\n\tif err != nil {\n\t\treturn nil, errors.Wrapf(err, \"failed to get schema list for catalog %s\", d.databaseName)\n\t}\n\n\t// Fetch all tables in all schemas in one query\n\tallTables, err := d.fetchAllTablesForCatalog(ctx, schemaNames)\n\tif err != nil {\n\t\treturn nil, errors.Wrapf(err, \"failed to fetch tables for catalog %s\", d.databaseName)\n\t}\n\n\t// Fetch all columns for all tables in one query\n\tallColumns, err := d.fetchAllColumnsForCatalog(ctx)\n\tif err != nil {\n\t\treturn nil, errors.Wrapf(err, \"failed to fetch columns for catalog %s\", d.databaseName)\n\t}\n\n\t// Organize the data into schemas\n\tvar schemas []*storepb.SchemaMetadata\n\tfor _, schemaName := range schemaNames {\n\t\ttables := allTables[schemaName]","sourceCodeStart":30,"sourceCodeEnd":66,"githubUrl":"https://github.com/bytebase/bytebase/blob/1870550677fe08f0d2a78c07acd27541464eb945/backend/plugin/db/trino/sync.go#L30-L66","documentation":"SyncDBSchema fetches the list of schemas in the target catalog via d.getSchemaList(ctx). On failure it wraps the error with the catalog name (d.databaseName). The schema enumeration query against Trino's system JDBC tables failed, so database-level sync aborts.","triggerScenarios":"Calling SyncDBSchema when the schema-list query (SELECT over system.jdbc.schemata) fails because of connectivity, missing catalog, or permission errors.","commonSituations":"Catalog name typo in the instance configuration, catalog was removed from the coordinator, or the sync user cannot read system.jdbc tables.","solutions":["Verify the catalog name in the connection config matches a catalog listed by SHOW CATALOGS","Run SELECT * FROM system.jdbc.schemata AS the sync user to check access","Fix connectivity/auth issues indicated by the wrapped error","Re-run database sync after correcting the catalog configuration"],"exampleFix":"// before\ndbMeta, err := driver.SyncDBSchema(ctx, db) // catalog \"prod1\" doesn't exist\n// after\n// correct databaseName in instance config to \"prod\"\ndbMeta, err := driver.SyncDBSchema(ctx, db)","handlingStrategy":"validation","validationCode":"catalogs, err := d.getCatalog(ctx)\nif err != nil {\n\treturn fmt.Errorf(\"cannot enumerate catalogs: %w\", err)\n}\nif !slices.Contains(catalogs, d.databaseName) {\n\treturn fmt.Errorf(\"catalog %q not found on coordinator\", d.databaseName)\n}","typeGuard":null,"tryCatchPattern":"schemaNames, err := d.getSchemaList(ctx)\nif err != nil {\n\treturn nil, errors.Wrapf(err, \"failed to get schema list for catalog %s\", d.databaseName)\n}","preventionTips":["Verify the catalog name exists via SHOW CATALOGS at config time","Alert on catalog drift when a previously configured catalog disappears","Keep the sync user's system.jdbc grants in infrastructure-as-code"],"tags":["trino","metadata-sync","schema"],"backgroundTag":"sql-query-failed","analyzedSha":"1870550677fe08f0d2a78c07acd27541464eb945","analyzedAt":"2026-09-06T21:16:13.665Z","contentChangedAt":"2026-09-06T21:16:13.665Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}