{"record":{"id":"060b09a6b10549c6","repo":"bytebase/bytebase","slug":"failed-to-generate-sequence-sdl-for-s-s","errorCode":null,"errorMessage":"failed to generate sequence SDL for %s.%s","messagePattern":"failed to generate sequence SDL for (.+?)\\.(.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"backend/plugin/schema/pg/get_database_definition.go","lineNumber":4233,"sourceCode":"\t\t\t\t\t\t\treturn nil, errors.Wrapf(err, \"failed to generate trigger comment for %s.%s.%s\", schemaName, table.Name, trigger.Name)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Write owned sequences (non-serial/non-identity) for this table\n\t\t\tfor _, sequence := range tableSequences {\n\t\t\t\t// Skip sequences that belong to serial or identity columns\n\t\t\t\tsequenceKey := schemaName + \".\" + sequence.Name\n\t\t\t\tif skipSequences[sequenceKey] {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\t// Only include sequences with owners (non-independent sequences)\n\t\t\t\tif sequence.OwnerTable != \"\" && sequence.OwnerColumn != \"\" {\n\t\t\t\t\tbuf.WriteString(\"\\n\")\n\t\t\t\t\tif err := writeSequenceSDL(&buf, schemaName, sequence); err != nil {\n\t\t\t\t\t\treturn nil, errors.Wrapf(err, \"failed to generate sequence SDL for %s.%s\", schemaName, sequence.Name)\n\t\t\t\t\t}\n\t\t\t\t\tbuf.WriteString(\";\\n\")\n\n\t\t\t\t\t// Add sequence comment if present\n\t\t\t\t\tif len(sequence.Comment) > 0 {\n\t\t\t\t\t\tbuf.WriteString(\"\\n\")\n\t\t\t\t\t\tif err := writeSequenceCommentSDL(&buf, schemaName, sequence); err != nil {\n\t\t\t\t\t\t\treturn nil, errors.Wrapf(err, \"failed to generate sequence comment for %s.%s\", schemaName, sequence.Name)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add ALTER SEQUENCE OWNED BY. Skip when the owning table\n\t\t\t\t\t// has no columns; the OWNED BY clause would reference a\n\t\t\t\t\t// column absent from the dump.\n\t\t\t\t\tif !tableHasNoColumns(table) {\n\t\t\t\t\t\tbuf.WriteString(\"\\n\")\n\t\t\t\t\t\tif err := writeAlterSequenceOwnedBy(&buf, schemaName, sequence); err != nil {\n\t\t\t\t\t\t\treturn nil, errors.Wrapf(err, \"failed to generate ALTER SEQUENCE OWNED BY for %s.%s\", schemaName, sequence.Name)","sourceCodeStart":4215,"sourceCodeEnd":4251,"githubUrl":"https://github.com/bytebase/bytebase/blob/1870550677fe08f0d2a78c07acd27541464eb945/backend/plugin/schema/pg/get_database_definition.go#L4215-L4251","documentation":"Owned sequences (those with OwnerTable and OwnerColumn set) are dumped as CREATE SEQUENCE via writeSequenceSDL. This error wraps the helper's error with schema and sequence name context and fails the database definition export. It is a pure context wrapper over the writer error.","triggerScenarios":"GetMultiFileDatabaseDefinition loops schema sequences; for each with sequence.OwnerTable != \"\" && sequence.OwnerColumn != \"\", writeSequenceSDL returns an error, wrapped as 'failed to generate sequence SDL for <schema>.<sequence>'.","commonSituations":"Dumping databases with identity/serial-backed sequences marked as owned; surfaces only when the buffer write fails unexpectedly.","solutions":["Unwrap the error for the root cause","Check that writeSequenceSDL's writer argument is a functioning strings.Builder","Retry if transient I/O was involved","Validate the sequence metadata (Name, OwnerTable, OwnerColumn) for anomalies","Escalate reproducible failures as bugs in backend/plugin/schema/pg"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"for _, seq := range schema.Sequences {\n\tif seq.OwnerTable == \"\" || seq.OwnerColumn == \"\" { continue } // independent sequences handled elsewhere\n}","typeGuard":"func isOwned(s *storepb.SequenceMetadata) bool { return s.OwnerTable != \"\" && s.OwnerColumn != \"\" }","tryCatchPattern":"if err := exportSDL(...); err != nil { return fmt.Errorf(\"sequence dump failed: %w\", err) }","preventionTips":["Ensure sequence ownership metadata is populated by the metadata collector","Write sequences to in-memory buffers in tests","Unwrap to identify the failing writer call","Skip independent sequences explicitly rather than relying on the exporter"],"tags":["postgresql","sdl","sequence"],"backgroundTag":"internal-invariant-violation","analyzedSha":"1870550677fe08f0d2a78c07acd27541464eb945","analyzedAt":"2026-09-06T21:16:13.665Z","contentChangedAt":"2026-09-06T21:16:13.665Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}