temporalio/temporal · error
only operation = is support for %s
Error message
only operation = is support for %s
What it means
For the WorkflowId filter in the gcloud archiver query parser, only the '=' operator is supported. If a comparison on WorkflowId uses another operator (like !=, LIKE, <, >), it returns 'only operation = is support for WorkflowId' (sic). This is because the archiver walks a fixed set of files and can only prune by exact workflow ID.
Source
Thrown at common/archiver/gcloud/query_parser.go:126
if !ok {
return fmt.Errorf("invalid filter name: %s", sqlparser.String(compExpr.Left))
}
colNameStr := sqlparser.String(colName)
op := compExpr.Operator
valExpr, ok := compExpr.Right.(*sqlparser.SQLVal)
if !ok {
return fmt.Errorf("invalid value: %s", sqlparser.String(compExpr.Right))
}
valStr := sqlparser.String(valExpr)
switch colNameStr {
case WorkflowID:
val, err := sqlquery.ExtractStringValue(valStr)
if err != nil {
return err
}
if op != "=" {
return fmt.Errorf("only operation = is support for %s", WorkflowID)
}
if parsedQuery.workflowID != nil && *parsedQuery.workflowID != val {
parsedQuery.emptyResult = true
return nil
}
parsedQuery.workflowID = new(val)
case RunID:
val, err := sqlquery.ExtractStringValue(valStr)
if err != nil {
return err
}
if op != "=" {
return fmt.Errorf("only operation = is support for %s", RunID)
}
if parsedQuery.runID != nil && *parsedQuery.runID != val {
parsedQuery.emptyResult = true
return nil
}View on GitHub (pinned to bde624efd1)
Solutions
- Use equality: WorkflowId = 'exact-id'
- If the exact ID is unknown, filter by CloseTime range instead (CloseTime >= / <= are supported)
- Retrieve the full workflow ID from another visibility source, then re-run the archive query with equality
Example fix
// before WHERE WorkflowId LIKE 'prod-%' // after WHERE WorkflowId = 'prod-orders-123' // or filter by CloseTime range
Defensive patterns
Strategy: validation
Validate before calling
if strings.Contains(query, "WorkflowId") && !strings.Contains(query, "WorkflowId =") {
return errors.New("WorkflowId filter supports only = operator")
} Type guard
func workflowIdFilterIsEquality(q string) bool { return !strings.Contains(q, "WorkflowId") || strings.Contains(q, "WorkflowId =") } Try / catch
_, err := client.ArchiveQuery(ctx, req)
if err != nil && strings.Contains(err.Error(), "only operation = is support") {
return fmt.Errorf("use exact equality for WorkflowId in archive queries: %w", err)
} Prevention
- Use only exact workflow IDs in archive queries
- Fall back to CloseTime range filters when the exact ID is unknown
- Do not attempt LIKE/prefix or negation filters on WorkflowId
When it happens
Trigger: Running an archive search with `WorkflowId != 'x'`, `WorkflowId LIKE 'prefix%'`, or any non-equality operator on WorkflowId.
Common situations: Users attempting prefix/pattern searches by workflow ID against the archive; the archived visibility store supports exact-ID lookup or CloseTime-range scans only.
Related errors
- invalid filter name: %s
- invalid value: %s
- unknown workflow close status: %s
- only one expression is allowed for %s
- invalid value for %s: %s
AI-assisted analysis of temporalio/temporal@bde624efd1 (2026-09-01).
Data as JSON: /api/errors/2fdcdae2b40faaff.
Report an issue: GitHub.