Skip to content

Commit

Permalink
fix(db): escape upper case table names for dump (#2302)
Browse files Browse the repository at this point in the history
  • Loading branch information
sweatybridge committed May 18, 2024
1 parent 8867b96 commit ee69c7d
Showing 1 changed file with 11 additions and 2 deletions.
13 changes: 11 additions & 2 deletions internal/db/dump/dump.go
Original file line number Diff line number Diff line change
Expand Up @@ -113,14 +113,21 @@ func dumpData(ctx context.Context, config pgconn.Config, schema, excludeTable []
extraFlags = append(extraFlags, "--column-inserts", "--rows-per-insert 100000")
}
for _, table := range excludeTable {
extraFlags = append(extraFlags, "--exclude-table "+table)
escaped := quoteUpperCase(table)
// Use separate flags to avoid error: too many dotted names
extraFlags = append(extraFlags, "--exclude-table "+escaped)
}
if len(extraFlags) > 0 {
env = append(env, "EXTRA_FLAGS="+strings.Join(extraFlags, " "))
}
return dump(ctx, config, dumpDataScript, env, dryRun, stdout)
}

func quoteUpperCase(table string) string {
escaped := strings.ReplaceAll(table, ".", `"."`)
return fmt.Sprintf(`"%s"`, escaped)
}

func dumpRole(ctx context.Context, config pgconn.Config, keepComments, dryRun bool, stdout io.Writer) error {
env := []string{}
if !keepComments {
Expand Down Expand Up @@ -152,7 +159,9 @@ func dump(ctx context.Context, config pgconn.Config, script string, env []string
// Bash variable expansion is unsupported:
// https://github.com/golang/go/issues/47187
parts := strings.Split(key, ":")
return envMap[parts[0]]
value := envMap[parts[0]]
// Escape double quotes in env vars
return strings.ReplaceAll(value, `"`, `\"`)
})
fmt.Println(expanded)
return nil
Expand Down

0 comments on commit ee69c7d

Please sign in to comment.