| 147 | } |
| 148 | |
| 149 | func (r *Local) Recover(info RecoverInfo) error { |
| 150 | fi, _ := os.Open(info.SourceFile) |
| 151 | defer fi.Close() |
| 152 | |
| 153 | cmd := exec.Command("docker", "exec", "-i", "-e", "PGPASSWORD="+r.Password, r.ContainerName, |
| 154 | "pg_restore", "-F", "c", "-c", "--if-exists", "--no-owner", "-U", r.Username, "-d", info.Name, |
| 155 | ) |
| 156 | if strings.HasSuffix(info.SourceFile, ".gz") { |
| 157 | gzipFile, err := os.Open(info.SourceFile) |
| 158 | if err != nil { |
| 159 | return err |
| 160 | } |
| 161 | defer gzipFile.Close() |
| 162 | gzipReader, err := gzip.NewReader(gzipFile) |
| 163 | if err != nil { |
| 164 | return err |
| 165 | } |
| 166 | defer gzipReader.Close() |
| 167 | cmd.Stdin = gzipReader |
| 168 | } else { |
| 169 | cmd.Stdin = fi |
| 170 | } |
| 171 | stdout, err := cmd.CombinedOutput() |
| 172 | if err != nil { |
| 173 | if strings.HasPrefix(string(stdout), "ERROR ") { |
| 174 | return errors.New(string(stdout)) |
| 175 | } |
| 176 | return err |
| 177 | } |
| 178 | return nil |
| 179 | } |
| 180 | |
| 181 | func (r *Local) SyncDB() ([]SyncDBInfo, error) { |
| 182 | var datas []SyncDBInfo |