{"record":{"id":"3eb73b53c2c9f987","repo":"supabase/supabase","slug":"invalid-queue-name-must-contain-only-alphanumeric-3eb73b","errorCode":null,"errorMessage":"Invalid queue name: must contain only alphanumeric characters, underscores, and hyphens","messagePattern":"Invalid queue name: must contain only alphanumeric characters, underscores, and hyphens","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"apps/studio/data/database-queues/database-queue-messages-delete-mutation.ts","lineNumber":24,"sourceCode":"import { isQueueNameValid } from '@/components/interfaces/Integrations/Queues/Queues.utils'\nimport { executeSql } from '@/data/sql/execute-sql-mutation'\nimport type { ResponseError, UseCustomMutationOptions } from '@/types'\n\nexport type DatabaseQueueMessageDeleteVariables = {\n  projectRef: string\n  connectionString?: string | null\n  queueName: string\n  messageId: number\n}\n\nexport async function deleteDatabaseQueueMessage({\n  projectRef,\n  connectionString,\n  queueName,\n  messageId,\n}: DatabaseQueueMessageDeleteVariables) {\n  if (!isQueueNameValid(queueName)) {\n    throw new Error(\n      'Invalid queue name: must contain only alphanumeric characters, underscores, and hyphens'\n    )\n  }\n\n  const { result } = await executeSql({\n    projectRef,\n    connectionString,\n    sql: safeSql`SELECT * FROM pgmq.delete(${literal(queueName)}, ${literal(messageId)})`,\n    queryKey: databaseQueuesKeys.create(),\n  })\n\n  return result\n}\n\ntype DatabaseQueueMessageDeleteData = Awaited<ReturnType<typeof deleteDatabaseQueueMessage>>\n\nexport const useDatabaseQueueMessageDeleteMutation = ({\n  onSuccess,","sourceCodeStart":6,"sourceCodeEnd":42,"githubUrl":"https://github.com/supabase/supabase/blob/beee91b9c2228dd57302dec75c733baaa84ab543/apps/studio/data/database-queues/database-queue-messages-delete-mutation.ts#L6-L42","documentation":"Same `isQueueNameValid` guard as the archive mutation, applied to deleteDatabaseQueueMessage before `pgmq.delete(<name>, <msgId>)`. Rejects any queueName failing `/^[a-zA-Z0-9_-]+$/` or the 1-47 char bounds.","triggerScenarios":"deleteDatabaseQueueMessage invoked with a malformed queueName (whitespace, dots, quotes, empty, >47 chars, non-ASCII). Throws before executeSql.","commonSituations":"Programmatic caller passing an un-sanitized identifier; URL/param drift; a queue created outside Studio with unsupported characters.","solutions":["Run the name through `QueueNameSchema.parse()` in the UI before calling the delete mutation.","Trim whitespace and disallow punctuation at the input control.","For externally-created queues with invalid names, rename via SQL first."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"import { QueueNameSchema } from '@/components/interfaces/Integrations/Queues/Queues.utils'\nconst parsed = QueueNameSchema.safeParse(queueName)\nif (!parsed.success) { throw new Error(parsed.error.issues[0]?.message ?? 'Invalid queue name') }\nawait deleteDatabaseQueueMessage({ projectRef, connectionString, queueName: parsed.data, messageId })","typeGuard":"const isValidQueueName = (x: string): x is string => QueueNameSchema.safeParse(x).success","tryCatchPattern":"if (!isQueueNameValid(queueName)) { toast.error('Invalid queue name'); return }\ntry { await deleteDatabaseQueueMessage(vars) } catch (e) { handleError(e) }","preventionTips":["Source queue names only from the validated queues list.","Re-validate before destructive actions like delete."],"tags":["queue","pgmq","validation","sql-injection-guard"],"backgroundTag":null,"analyzedSha":"beee91b9c2228dd57302dec75c733baaa84ab543","analyzedAt":"2026-08-12T06:51:48.935Z","schemaVersion":2},"datasetVersion":"2026-08-12T13:17:24.610Z"}