6
"github.com/spf13/cobra"
7
"github.com/spf13/viper"
8
"github.com/wal-g/tracelog"
9
"github.com/wal-g/wal-g/internal"
10
conf "github.com/wal-g/wal-g/internal/config"
11
"github.com/wal-g/wal-g/internal/databases/greenplum"
12
"github.com/wal-g/wal-g/internal/databases/postgres"
16
segBackupFetchShortDescription = "Fetches a segment backup from storage"
17
maskFlagDescription = `Fetches only files which path relative to destination_directory
18
matches given shell file pattern.
19
For information about pattern syntax view: https://golang.org/pkg/path/filepath/#Match`
20
restoreSpecDescription = "Path to file containing tablespace restore specification"
25
var targetUserData string
29
var segBackupFetchCmd = &cobra.Command{
30
Use: "seg-backup-fetch destination_directory [backup_name | --target-user-data <data>] --content-id=[content_id]",
31
Short: segBackupFetchShortDescription,
32
Args: cobra.RangeArgs(1, 2),
33
Run: func(cmd *cobra.Command, args []string) {
34
internal.ConfigureLimiters()
36
if targetUserData == "" {
37
targetUserData = viper.GetString(conf.FetchTargetUserDataSetting)
40
greenplum.SetSegmentStoragePrefix(contentID)
42
targetBackupSelector, err := createTargetFetchSegBackupSelector(cmd, args, fetchTargetUserData)
43
tracelog.ErrorLogger.FatalOnError(err)
45
storage, err := internal.ConfigureStorage()
46
tracelog.ErrorLogger.FatalOnError(err)
48
reverseDeltaUnpack := viper.GetBool(conf.UseReverseUnpackSetting)
49
skipRedundantTars := viper.GetBool(conf.SkipRedundantTarsSetting)
51
if reverseDeltaUnpack || skipRedundantTars {
52
tracelog.ErrorLogger.Fatalf("%s and %s settings are not supported yet",
53
conf.UseReverseUnpackSetting, conf.SkipRedundantTarsSetting)
56
var extractProv postgres.ExtractProvider
58
if partialRestoreArgs != nil {
59
extractProv = greenplum.NewExtractProviderDBSpec(partialRestoreArgs)
61
extractProv = greenplum.ExtractProviderImpl{}
64
pgFetcher := postgres.GetFetcherOld(args[0], fileMask, restoreSpec, extractProv)
65
internal.HandleBackupFetch(storage.RootFolder(), targetBackupSelector, pgFetcher)
70
func createTargetFetchSegBackupSelector(cmd *cobra.Command,
71
args []string, targetUserData string) (internal.BackupSelector, error) {
77
backupSelector, err := internal.NewTargetBackupSelector(targetUserData, targetName, postgres.NewGenericMetaFetcher())
79
fmt.Println(cmd.UsageString())
82
return backupSelector, nil
86
segBackupFetchCmd.Flags().StringVar(&fileMask, "mask", "", maskFlagDescription)
87
segBackupFetchCmd.Flags().StringVar(&restoreSpec, "restore-spec", "", restoreSpecDescription)
88
segBackupFetchCmd.Flags().StringVar(&fetchTargetUserData, "target-user-data",
89
"", targetUserDataDescription)
90
segBackupFetchCmd.PersistentFlags().IntVar(&contentID, "content-id", 0, "segment content ID")
91
_ = segBackupFetchCmd.MarkFlagRequired("content-id")
92
segBackupFetchCmd.Flags().StringSliceVar(&partialRestoreArgs, "restore-only", nil, restoreOnlyDescription)
94
segBackupFetchCmd.Hidden = true
95
cmd.AddCommand(segBackupFetchCmd)