plandex-ai/plandex · error
error getting owner role id: %v
Error message
error getting owner role id: %v
What it means
cacheOrgOwnerRoleId performs 'SELECT id FROM org_roles WHERE name = owner' via Conn.Get. Any driver-level failure — no rows (sql.ErrNoRows), connection error, or query error — is wrapped with this message and propagated up through GetOrgOwnerRoleId and CacheOrgRoleIds. It is the lowest-level RBAC lookup failure.
Source
Thrown at app/server/db/rbac_helpers.go:80
err = cacheOrgMemberRoleId()
if err != nil {
return fmt.Errorf("error getting org member role id: %v", err)
}
if orgMemberRoleId == "" {
log.Println("org member role id is empty at startup")
}
return nil
}
func cacheOrgOwnerRoleId() error {
var roleId string
err := Conn.Get(&roleId, "SELECT id FROM org_roles WHERE name = 'owner'")
if err != nil {
return fmt.Errorf("error getting owner role id: %v", err)
}
orgOwnerRoleId = roleId
return nil
}
func cacheOrgMemberRoleId() error {
var roleId string
err := Conn.Get(&roleId, "SELECT id FROM org_roles WHERE name = 'member'")
if err != nil {
return fmt.Errorf("error getting member role id: %v", err)
}
orgMemberRoleId = roleId
return nilView on GitHub (pinned to e2d772072e)
Solutions
- Insert the 'owner' row: INSERT INTO org_roles (name) VALUES ('owner');
- Run pending migrations creating/seeding org_roles
- Check the inner error: sql.ErrNoRows means data missing, ping failure means connectivity
- Ensure MustInitDb/Conn initialization precedes any call
Example fix
// before
var roleId string
err := Conn.Get(&roleId, "SELECT id FROM org_roles WHERE name = 'owner'")
// after
var roleId string
err := Conn.Get(&roleId, "SELECT id FROM org_roles WHERE name = 'owner'")
if errors.Is(err, sql.ErrNoRows) {
return fmt.Errorf("org_roles 'owner' row missing — run seed migrations")
} Defensive patterns
Strategy: retry
Validate before calling
var n int
err := db.QueryRow("SELECT count(*) FROM org_roles WHERE name = 'owner'").Scan(&n)
if err != nil || n == 0 {
return fmt.Errorf("owner role row missing")
} Type guard
func isNoRows(err error) bool {
return err != nil && (errors.Is(err, sql.ErrNoRows) || strings.Contains(err.Error(), "sql: no rows"))
} Try / catch
roleId, err := GetOrgOwnerRoleId()
if err != nil {
if isNoRows(err) {
return retryWithBackoff(3, func() error { // only useful after seeding
_, e := GetOrgOwnerRoleId()
return e
})
}
return fmt.Errorf("db connectivity issue: %w", err)
} Prevention
- Check errors.Is(err, sql.ErrNoRows) to separate data vs connectivity issues
- Ping the DB in health checks
- Keep role seed data in migrations, not manual SQL
When it happens
Trigger: First GetOrgOwnerRoleId/CacheOrgRoleIds call in a process where org_roles is empty or absent, the DB is down, or Conn is nil.
Common situations: sql.ErrNoRows from an unseeded database; connection refused after a DB restart; migrations pending on a new environment.
Related errors
- error getting member role id: %v
- error getting org owner role id: %v
- error getting org member role id: %v
- error getting org owners: %v
- error creating invite: %v
AI-assisted analysis of plandex-ai/plandex@e2d772072e (2026-09-05).
Data as JSON: /api/errors/0f962152db1f76d7.
Report an issue: GitHub.