2014-09-26 4 views
0

Я работаю с PostgreSQL уже несколько месяцев. Теперь, прежде чем вы живете, мы обычно использовали живую базу данных практически для всех (создание новых столбцов в реальных таблицах базы данных, выполнение обновлений и вставка запросов и т. Д.). Но теперь мы хотим жить, и нам нужно делать что-то по-другому, прежде чем мы это сделаем. Лучший способ - иметь тестовую базу данных и базу данных.База данных живых и тестовых тестов PostgreSQL

Теперь я создал копию базы данных, поэтому у нас есть тестовая база данных для запуска тестов. Проблема в том, что данные устарели после 24 часов, поэтому нам действительно нужно создать новую копию каждые 24 часа, что не очень удобно делать вручную.

Итак, мой вопрос: есть ли здесь люди, которые знают правильный способ справиться с этой проблемой?

Я думаю, что самый идеальный способ: - скопировать список таблиц из живой базы данных в тестовую базу данных (пропустить таблицы, такие как пользователи). - позволяют добавлять столбцы, переименовывать их или даже удалять, а когда мы развертываем новую версию веб-сайта, переносите эти изменения из тестовой базы данных в живую базу данных (нетто-халатность, но это будет хорошая функция).

+1

Восстановите тестовую систему один раз в день, посреди ночи, используя функции резервного копирования/восстановления, которые вы, безусловно, внедрили для живой системы. –

+0

Я просто ответил на очень похожий вопрос на dba.SE; см. http://dba.stackexchange.com/q/77711/7788 –

ответ

0

Если ваша структура базы данных меняется, вы делаете NOT хотите, чтобы она была автоматической. You будет сдуть работу разработчика и данные. Вы хотите его вручную.


я когда-то управлял командой, которая имела подобную ситуацию: мульти-TiB базы данных, обновляется ежедневно, и необходимости делать тестирования и разработки в отношении того, что данные уточненный. Вот так мы решили это:

В нашей базе данных определена функция, называемая TODAY(). В нашей живой системе это была обертка для NOW(). В нашей тестовой системе он обратился к таблице с одним столбцом, единственной строкой которой была дата, которую мы могли бы установить. Это означает, что наша тестовая система была машиной времени, которая могла бы притворяться, что любая дата была текущей.

Это означает, что каждая функция или процедура, которые мы написали, должны были быть осведомлены о времени. Должен ли я заботиться о запланированных событиях? Как далеко в будущем? Это сделало наши функции чрезвычайно надежными и сделало его простым, чтобы протестировать их против огромного множества исторических данных. Это помогло поймать большое количество ошибок, о которых мы никогда бы не подумали, но мы видели, что это действительно произойдет в наших исторических данных. Это похоже на функциональное программирование для вашей базы данных!

Мы по-прежнему планируем обновление базы данных из резервной копии в реальном времени примерно каждый месяц или около того. Это позволило получить больше данных и проверить нашу процедуру резервного копирования/восстановления. Наш DBA будет запускать сценарий «пост-тест-синхронизация», который будет устанавливать разрешения для разработчиков, поэтому мы были уверены, что все, что мы использовали в тестовой системе, будет работать и на живом. Это помогло нам создать сценарии базы данных развертывания.

+0

Благодарим вас за четкий ответ. Итак, вы, где написаны сценарии, которые используют TODAY() вместо NOW(). В вашей реальной базе данных TODAY() была просто оболочкой для NOW(), и в вашей тестовой базе данных функция TODAY() была просто еще одной датой? И где вы можете установить диапазон дат? Это звучит как отличное решение –

Смежные вопросы