Frage

Ich habe eine Postgres-Produktionsdatenbank in der Produktion (die eine Menge von Daten enthält). jetzt brauche ich das Modell des tg-App ändern paar neuer Tabellen in die Datenbank hinzuzufügen.

Wie kann ich das tun? Ich verwende SQLAlchemy.

War es hilfreich?

Lösung

Dies funktioniert immer und wenig Denken erfordert -. Nur Geduld

  1. Erstellen Sie eine Sicherung.

  2. Eigentlich ein Backup erstellen. Jeder überspringt Schritt 1 denken, dass sie eine Sicherung haben, aber sie können es nie mit ihm finden oder arbeiten. Vertrauen Sie nicht jede Sicherung, die Sie nicht behoben werden kann.

  3. Erstellen Sie ein neues Datenbankschema.

  4. Definieren Sie die neue Struktur von Grund auf in dem neuen Schema. Idealerweise verfügen Sie ein DDL Skript ausführen, das das neue Schema aufbaut. Sie nicht ein Skript, um das Schema zu bauen? Erstellen Sie ein und setzt es unter Versionskontrolle.

    Mit SA, können Sie Ihre Tabellen definieren und es kann für Sie Ihr Schema aufbauen. Dies ist ideal, da Sie Ihr Schema unter Versionskontrolle in Python haben.

  5. Verschieben von Daten.

    a. Bei Tabellen, die nicht Struktur ändern einfache INSERT / SELECT-Anweisungen Verschieben von Daten aus dem alten Schema neues Schema verwendet wird.

    b. Für Tabellen, die Änderungsstruktur haben, INSERT / SELECT-Skripte, um die Daten aus dem alten zu bewegen, um neue zu entwickeln. Oft kann dies eine einzelne SQL-Anweisung pro neue Tabelle sein. In einigen Fällen hat es eine Python-Schleife mit zwei offenen Verbindungen sein.

    c. Für neue Tabellen, die Daten laden.

  6. Halten Sie das alte Schema verwenden. Starten Sie das neue Schema verwenden. Finden Sie jedes Programm, das das alte Schema und fixieren Sie die Konfiguration verwendet.

    Sie haben noch keine Liste der Anwendungen? Machen Sie ein. Im Ernst - es ist wichtig.

    Anwendungen haben hartcodierte DB Konfigurationen? Fix, dass auch während Sie gerade dabei sind. Erstellen Sie entweder eine gemeinsame Konfigurationsdatei, oder verwenden eine gemeinsame Umgebungsvariable oder etwas zu (a) gewährleisten Konsistenz und (b) zentralisieren, den Begriff der „Produktion“.

Sie können diese Art von Verfahren tun, wann immer Sie eine größere Operation zu tun. Es ist nie berührt die alte Datenbank mit Ausnahme der Daten zu extrahieren.

Andere Tipps

Der einfachste Ansatz ist, einfach einig SQL-Update-Skripte zu schreiben und diejenigen, die Datenbank zu aktualisieren verwenden. Offensichtlich ist das ein ziemlich Low-Level (sozusagen) Ansatz.

Wenn Sie denken, werden Sie viel dies und wollen tun, in Python bleiben Sie vielleicht wollen, betrachten sqlalchemy Migrations . Es gab einen Artikel darüber in den letzten Python Magazinen.

Ich würde in der Regel zustimmen John . One-Pass-Auswahl und Einfügen würden für eine große Datenbank nicht praktisch sein, und Einrichten der Replikation oder Multi-Pass-Differential SELECT / INSERTs wäre wahrscheinlich schwieriger und fehleranfällig ist.

Ich persönlich verwenden SQLAlchemy als ORM unter Turbogears. Gehen Sie Schema Migrationen ich laufen:

tg-admin sql status

Um die Differenz zwischen den Live-und Entwicklungsschemata zu sehen, dann manuell schreiben (und Versionskontrolle) DDL-Skripten die erforderlichen Änderungen vorzunehmen.

Für die Verwendung von SQLAlchemy Standalone (dh nicht unter Turbogears), ist die sql status Funktionalität ziemlich einfach und kann hier in der TG-Quelle zu finden: http://svn.turbogears.org/branches/1.1/turbogears/command/sacommand.py (es gibt Versionen für ältere Python / SA veröffentlicht in der 1,0 Zweig, auch).

Wenn Sie nur Tabellen hinzufügen, und keine der Tabellen zu modifizieren, welche die vorhandenen Daten in ihm haben, können Sie einfach die neuen sqlalchemy Tabellendefinitionen in der model.py, und führen Sie:

tg-admin sql create

Dies wird nicht alle Ihre vorhandenen Tabellen überschrieben werden.

Für Schema Migration, könnte nehmen Sie einen Blick auf http://code.google. com / p / sqlalchemy Migrations / obwohl ich es nicht benutzt noch selbst.

Nehmen Sie immer eine Sicherung der Produktionsdatenbank vor der Migration Aktivität.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top