| 325 | } |
| 326 | |
| 327 | func (r *Remote) SyncDB() ([]SyncDBInfo, error) { |
| 328 | ctx, cancel := context.WithTimeout(context.Background(), 300*time.Second) |
| 329 | defer cancel() |
| 330 | |
| 331 | var datas []SyncDBInfo |
| 332 | rows, err := r.Client.Query("SELECT datname FROM pg_database;") |
| 333 | if err != nil { |
| 334 | return nil, err |
| 335 | } |
| 336 | defer rows.Close() |
| 337 | for rows.Next() { |
| 338 | var dbName string |
| 339 | if err := rows.Scan(&dbName); err != nil { |
| 340 | continue |
| 341 | } |
| 342 | if len(dbName) == 0 || dbName == "template1" || dbName == "template0" || dbName == r.User { |
| 343 | continue |
| 344 | } |
| 345 | datas = append(datas, SyncDBInfo{Name: dbName, From: r.From, PostgresqlName: r.Database}) |
| 346 | } |
| 347 | if errors.Is(ctx.Err(), context.DeadlineExceeded) { |
| 348 | return nil, buserr.New("ErrExecTimeOut") |
| 349 | } |
| 350 | return datas, nil |
| 351 | } |
| 352 | |
| 353 | func (r *Remote) Close() { |
| 354 | _ = r.Client.Close() |