/ / Richtiger Weg zum Erstellen benutzerdefinierter pgsql-Typen in Django - Datenbank, Django, Postgresql, Django-Syncdb, Django-Evolution

Richtiger Weg, um benutzerdefinierte Pgsql-Typen in Django zu erstellen - Datenbank, Django, Postgresql, Django-Syncdb, Django-Evolution

Was ist der richtige Weg, um benutzerdefinierte pgsql zu erstellen?Typen für Django-Anwendung, so dass jedes Mal, wenn Datenbank mit Syncdb erstellt wird, alle benutzerdefinierten Typen erstellt werden, bevor Tabellen erstellt werden (damit Tabellen diesen Typ verwenden können)?

Ich benutze auch Django-Evolution, aber das ist keinegeeignete Lösung - läuft nach syncdb. Ich kann mir einen Workaround vorstellen, wie das Definieren von Modellen mit Standardfeldtypen und das Erstellen von Typen und das Ändern von Spaltentypen in Evolution.

Irgendeine Idee?

Antworten:

1 für die Antwort № 1

Ich glaube nicht, dass es in Django einen Weg gibt, dies zu tun. Wie Sie wahrscheinlich wissen, gibt es einen post_syncdb Signal aber kein Signal für pre_syncdb.

Ich denke, es gibt nur zwei Möglichkeiten: Hacking pre_syncdb Signal in Django oder verwenden Sie ein Automatisierungswerkzeug wie Stoff.

Selbst hacken pre_syncdb Signal, auch wenn es der richtige Weg ist, dies zu tun, wird wahrscheinlich nicht einfach sein und Sie müssen den Patch jedes neuen Django-Releases beibehalten.

Auf der anderen Seite ist ein Automatisierungswerkzeug wie Fabric nicht nur einfach, sondern bietet Ihrem Projekt auch andere Vorteile.

Als Beispiel sieht ein Teil meines Fabfile so aus:

def createdb():
"Create a clean database"
run("createdb --encoding=UNICODE $(db_name) -O $(db_owner) -U $(db_owner)")
run("python manage.py syncdb --noinput")

Fügen Sie so etwas vor der syncdb ein:

run("psql -U $(db_owner) $(db_name) < app/sql/custom_types.sql")

und Sie sollten gut sein, indem Sie einfach Folgendes eingeben:

$ fab createdb

oder:

$ fab cluster createdb

um den Befehl auf allen in Ihrer Umgebung aufgeführten Maschinen auszuführen cluster.