Перейти к содержимому

Yandex / Яндекс - 5

Актуальность: 1 кв 2026

  • PROD - OLTP-сервер;
  • STATS - сервер для долгих аналитических запросов.

Задача: На текущем сервере в базе prod есть большая (10 Tb) таблица вида: sql/general

Заголовок раздела «Задача: На текущем сервере в базе prod есть большая (10 Tb) таблица вида: sql/general»
CREATE TABLE profiles (
id SERIAL,
data JSONB
)

В таблице могут быть «дырки», то есть некоторые id могут быть пропущены.

Нужно написать программу для копирования таблицы profiles с PROD на STATS.

Задача: Для работы с базами данных предполагается использовать следующие интерфейсы: go/interfaces

Заголовок раздела «Задача: Для работы с базами данных предполагается использовать следующие интерфейсы: go/interfaces»
type Row []interface{}
type Database interface {
// Реализация интерфейса Database умеет переустанавливать подключения.
// Вызов SaveRows идемпотентен.
io.Closer
GetMaxID(ctx context.Context) (uint64, error)
LoadRows(ctx context.Context, minID, maxID uint64) ([]Row, error) // [minID, maxID)
SaveRows(ctx context.Context, rows []Row) error
}
func Connect(ctx context.Context, dbname string) (Database, error)
// CopyTable
// Если full = false, то продолжить переливку данных с места прошлой ошибки.
// Если full = true, то перелить все данные.
func CopyTable(fromName string, toName string, full bool) error {
// код реализации
}