diff --git a/weed/credential/postgres/postgres_group.go b/weed/credential/postgres/postgres_group.go index 9590c7a72..12850f641 100644 --- a/weed/credential/postgres/postgres_group.go +++ b/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 diff --git a/weed/credential/postgres/postgres_store.go b/weed/credential/postgres/postgres_store.go index 13ac312f1..4c9a9771c 100644 --- a/weed/credential/postgres/postgres_store.go +++ b/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 }