На производстве размер нашей базы данных составляет несколько сотен гигабайт. Для разработки и тестирования нам необходимо создать моментальные снимки этой базы данных, которые функционально эквивалентны, но имеют размер всего 10 или 20 гигабайт.
Проблема в том, что данные наших бизнес-структур разбросаны по множеству таблиц. Мы хотим создать своего рода отфильтрованный снимок, чтобы в дамп были включены только некоторые объекты. Таким образом, мы можем получать свежие снимки примерно раз в месяц для разработки и тестирования.
Например, предположим, что у нас есть сущности, которые имеют эти отношения «многие ко многим»:
- Компания имеет N подразделений
- В подразделении N сотрудников
- У сотрудника N записей о посещаемости
Есть около 1000 компаний, 2500 подразделений, 175 000 сотрудников и десятки миллионов записей о посещаемости. Нам нужен воспроизводимый способ получения, скажем, первых 100 компаний и всех входящих в них подразделений, сотрудников и учетных записей посещаемости .
В настоящее время мы используем pg_dump для схемы, а затем запускаем pg_dump с --disable-triggers и --data-only, чтобы получить все данные из меньших таблиц. Мы не хотим писать пользовательские сценарии для извлечения части данных, потому что у нас быстрый цикл разработки и мы обеспокоены тем, что пользовательские сценарии будут хрупкими и, вероятно, будут устаревшими.
Как мы можем это сделать? Существуют ли сторонние инструменты, которые могут помочь извлечь логические разделы из базы данных? Как называются эти инструменты?
Также приветствуются любые общие советы!