Как обновить базу данных производства приложений TurboGears - PullRequest
1 голос
/ 19 ноября 2008

У меня есть производственная база данных postgres (которая содержит много данных). Теперь мне нужно изменить модель приложения tg, чтобы добавить пару новых таблиц в базу данных.

Как мне это сделать? Я использую sqlAlchemy.

Ответы [ 4 ]

1 голос
/ 24 декабря 2008

Я бы вообще согласился с Джоном . Однопроходный SELECT и INSERTing не будет практичным для большой базы данных, а настройка репликации или многопроходных дифференциальных SELECT / INSERTs, вероятно, будет сложнее и более подвержена ошибкам.

Лично я использую SQLAlchemy в качестве ORM под TurboGears . Для выполнения миграции схемы я запускаю:

tg-admin sql status

Чтобы увидеть разницу между действующей и разрабатываемой схемами, затем вручную написать (и управлять версиями) сценарии DDL для внесения необходимых изменений.

Для тех, кто использует SQLAlchemy в автономном режиме (т.е. не в TurboGears), функциональность sql status довольно проста и может быть найдена здесь в источнике TG: http://svn.turbogears.org/branches/1.1/turbogears/command/sacommand.py (есть версии для более старых выпусков Python / SA в Ветка 1.0 тоже).

1 голос
/ 19 ноября 2008

Самый простой подход - просто написать несколько сценариев обновления sql и использовать их для обновления базы данных. Очевидно, это довольно низкоуровневый подход.

Если вы думаете, что будете делать это много и хотите придерживаться Python, вы можете посмотреть на sqlalchemy-migrate . В недавнем журнале Python была статья об этом.

1 голос
/ 19 ноября 2008

Это всегда работает и требует немного размышлений - только терпение.

  1. Сделайте резервную копию.

  2. На самом деле сделать резервную копию. Каждый пропускает шаг 1, думая, что у него есть резервная копия, но он никогда не сможет найти ее или работать с ней. Не доверяйте никаким резервным копиям, которые вы не можете восстановить.

  3. Создание новой схемы базы данных.

  4. Определите вашу новую структуру с нуля в новой схеме. В идеале вы должны запустить DDL-скрипт, который строит новую схему. Нет сценария для построения схемы? Создайте его и поставьте под контроль версий.

    С SA вы можете определить свои таблицы, и он может построить вашу схему для вас. Это идеально, так как ваша схема находится под контролем версий в Python.

  5. Переместить данные.

    а. Для таблиц, которые не изменили структуру, переместите данные из старой схемы в новую, используя простые операторы INSERT / SELECT.

    б. Для таблиц, которые изменили структуру, разработайте сценарии INSERT / SELECT, чтобы переместить данные из старого в новое. Часто это может быть один оператор SQL для каждой новой таблицы. В некоторых случаях это должен быть цикл Python с двумя открытыми соединениями.

    с. Для новых таблиц загрузите данные.

  6. Прекратите использовать старую схему. Начните использовать новую схему. Найдите каждую программу, которая использовала старую схему, и исправьте конфигурацию.

    Нет списка приложений? Сделай один. Серьезно - это важно.

    Приложения имеют жестко запрограммированные конфигурации БД? Исправьте это тоже, пока вы на это. Либо создайте общий файл конфигурации, либо используйте некоторую общую переменную среды или что-то еще, чтобы (а) обеспечить согласованность и (б) централизовать понятие «производство».

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

0 голосов
/ 19 ноября 2008

Если вы просто добавляете таблицы и не изменяете ни одну из таблиц, в которых есть существующие данные, вы можете просто добавить новые определения таблиц sqlAlchemy в model.py и выполнить:

tg-admin sql create

Это не перезапишет ни одну из ваших существующих таблиц.

Для миграции схемы вы можете взглянуть на http://code.google.com/p/sqlalchemy-migrate/, хотя я сам еще не использовал ее.

Всегда выполняйте резервное копирование производственной базы данных перед выполнением операции миграции.

...