{"record":{"id":"01a3c748dd3ae221","repo":"bytebase/bytebase","slug":"database-owner-is-required-for-cockroachdb","errorCode":null,"errorMessage":"database owner is required for CockroachDB","messagePattern":"database owner is required for CockroachDB","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"backend/api/v1/rollout_service_task.go","lineNumber":385,"sourceCode":"\t\t}\n\tcase storepb.Engine_SNOWFLAKE:\n\t\tif characterSet != \"\" {\n\t\t\treturn errors.Errorf(\"Snowflake does not support character set, but got %s\", characterSet)\n\t\t}\n\t\tif collation != \"\" {\n\t\t\treturn errors.Errorf(\"Snowflake does not support collation, but got %s\", collation)\n\t\t}\n\tcase storepb.Engine_POSTGRES:\n\t\tif owner == \"\" {\n\t\t\treturn errors.Errorf(\"database owner is required for PostgreSQL\")\n\t\t}\n\tcase storepb.Engine_REDSHIFT:\n\t\tif owner == \"\" {\n\t\t\treturn errors.Errorf(\"database owner is required for Redshift\")\n\t\t}\n\tcase storepb.Engine_COCKROACHDB:\n\t\tif owner == \"\" {\n\t\t\treturn errors.Errorf(\"database owner is required for CockroachDB\")\n\t\t}\n\tcase storepb.Engine_MONGODB, storepb.Engine_MSSQL, storepb.Engine_DORIS, storepb.Engine_STARROCKS:\n\t\t// no-op.\n\tdefault:\n\t\tif characterSet == \"\" {\n\t\t\treturn errors.Errorf(\"character set missing for %s\", dbType.String())\n\t\t}\n\t\t// For postgres, we don't explicitly specify a default since the default might be UNSET (denoted by \"C\").\n\t\t// If that's the case, setting an explicit default such as \"en_US.UTF-8\" might fail if the instance doesn't\n\t\t// install it.\n\t\tif collation == \"\" {\n\t\t\treturn errors.Errorf(\"collation missing for %s\", dbType.String())\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc getCreateDatabaseStatement(dbType storepb.Engine, c *storepb.PlanConfig_CreateDatabaseConfig, databaseName, adminDatasourceUser string) (string, error) {","sourceCodeStart":367,"sourceCodeEnd":403,"githubUrl":"https://github.com/bytebase/bytebase/blob/1870550677fe08f0d2a78c07acd27541464eb945/backend/api/v1/rollout_service_task.go#L367-L403","documentation":"Returned by checkCharacterSetCollationOwner when a create-database config targets a CockroachDB instance but the owner field is empty. Like PostgreSQL (which CockroachDB is wire-compatible with), CREATE DATABASE there expects an owner role, so Bytebase requires owner for this engine before generating the task.","triggerScenarios":"Plan targeting CockroachDB with createDatabaseConfig.owner == \"\" at rollout task creation time in the rollout service.","commonSituations":"Plans authored for Postgres then switched to CockroachDB where owner got dropped; automation constructing configs without the owner field; renamed or removed CockroachDB user.","solutions":["Set createDatabaseConfig.owner to a valid CockroachDB user/role.","Verify the role exists (SHOW USERS) on the target cluster before rollout.","Ensure plan templates always include owner for the Postgres-family engines (Postgres, Redshift, CockroachDB)."],"exampleFix":"// before\n{\"database\": \"app\", \"owner\": \"\"}\n// after\n{\"database\": \"app\", \"owner\": \"crdb_admin\"}","handlingStrategy":"validation","validationCode":"if engine == storepb.Engine_COCKROACHDB && cfg.GetCreateDatabaseConfig().GetOwner() == \"\" {\n    return fmt.Errorf(\"owner is required when creating database %q on CockroachDB\", cfg.GetCreateDatabaseConfig().GetDatabase())\n}","typeGuard":"func cockroachCreateConfigValid(cfg *storepb.PlanConfig_CreateDatabaseConfig) bool {\n    return cfg != nil && strings.TrimSpace(cfg.GetOwner()) != \"\"\n}","tryCatchPattern":null,"preventionTips":["Set owner to an existing CockroachDB user in every create-database plan.","Run SHOW USERS on the cluster to confirm the role before rollout.","Cover CockroachDB alongside Postgres/Redshift in owner-required checks."],"tags":["cockroachdb","validation","owner","create-database"],"backgroundTag":"missing-required-config-field","analyzedSha":"1870550677fe08f0d2a78c07acd27541464eb945","analyzedAt":"2026-09-06T21:16:13.665Z","contentChangedAt":"2026-09-06T21:16:13.665Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}