Browse Source

iam: detect postgres unique constraint violation and add groups index

Return ErrGroupAlreadyExists when INSERT hits SQLState 23505 instead of
a generic error. Add index on groups(disabled) for filtered queries.
pull/8560/head
Chris Lu 2 days ago
parent
commit
1487ecbc8e
  1. 7
      weed/credential/postgres/postgres_group.go
  2. 6
      weed/credential/postgres/postgres_store.go

7
weed/credential/postgres/postgres_group.go

@ -4,8 +4,10 @@ import (
"context"
"database/sql"
"encoding/json"
"errors"
"fmt"
"github.com/jackc/pgx/v5/pgconn"
"github.com/seaweedfs/seaweedfs/weed/credential"
"github.com/seaweedfs/seaweedfs/weed/pb/iam_pb"
)
@ -24,7 +26,10 @@ func (store *PostgresStore) CreateGroup(ctx context.Context, group *iam_pb.Group
`INSERT INTO groups (name, members, policy_names, disabled) VALUES ($1, $2, $3, $4)`,
group.Name, membersJSON, policyNamesJSON, group.Disabled)
if err != nil {
// Check for unique constraint violation
var pgErr *pgconn.PgError
if errors.As(err, &pgErr) && pgErr.Code == "23505" {
return credential.ErrGroupAlreadyExists
}
return fmt.Errorf("failed to create group: %w", err)
}
return nil

6
weed/credential/postgres/postgres_store.go

@ -178,6 +178,12 @@ func (store *PostgresStore) createTables() error {
return fmt.Errorf("failed to create groups table: %w", err)
}
// Create index on groups disabled column for filtering
groupsDisabledIndex := `CREATE INDEX IF NOT EXISTS idx_groups_disabled ON groups (disabled);`
if _, err := store.db.Exec(groupsDisabledIndex); err != nil {
return fmt.Errorf("failed to create groups disabled index: %w", err)
}
return nil
}

Loading…
Cancel
Save