kivitendo/doc/sql-upgrade-dateien.txt @ 77923db3
4fd8bdbf | Moritz Bunkus | Neuer Mechanismus f?r SQL-Upgradedateien
|
|
----------------------------------------
|
|||
Der alte Mechanismus f?r SQL-Upgradescripte, der auf einer
|
|||
Versionsnummer beruht und dann in sql/Pg-upgrade nach einem Script f?r
|
|||
diese Versionsnummer sucht, schr?nkt sehr ein, z.B. was die parallele
|
|||
Entwicklung im stable- und unstable-Baum betrifft.
|
|||
Dieser Mechanismus wurde f?r Lx-Office 2.4.1 deutlich erweitert. Es
|
|||
werden weiterhin alle Scripte aus sql/Pg-upgrade
|
|||
ausgef?hrt. Zus?tzlich gibt es aber ein zweites Verzeichnis,
|
|||
sql/Pg-upgrade2. In diesem Verzeichnis muss pro Datenbankupgrade eine
|
|||
Datei existieren, die neben den eigentlich auszuf?hrenden SQL- oder
|
|||
Perl-Befehlen einige Kontrollinformationen enth?lt.
|
|||
Neu sind die Kontrollinformationen, die Abh?ngigkeiten und Priorit?ten
|
|||
definieren k?nnen werden, sodass Datenbankscripte zwar in einer
|
|||
sicheren Reihenfolge ausgef?hrt werden (z.B. darf ein "ALTER TABLE"
|
|||
erst ausgef?hrt werden, wenn die Tabelle mit "CREATE TABLE" angelegt
|
|||
wurde), diese Reihenfolge aber so flexibel ist, dass man keine
|
|||
Versionsnummern mehr braucht.
|
|||
Lx-Office merkt sich dabei, welches der Upgradescripte in
|
|||
sql/Pg-upgrade2 bereits durchgef?hrt wurde und f?hrt diese nicht
|
|||
erneut aus. Dazu dient die Tabelle "schema_info", die bei der
|
|||
Anmeldung automatisch angelegt wird.
|
|||
Format der Kontrollinformationen
|
|||
--------------------------------
|
|||
Die Kontrollinformationen sollten sich am Anfang der jeweiligen
|
|||
Upgradedatei befinden. Jede Zeile, die Kontrollinformationen enth?lt,
|
|||
hat dabei das folgende Format:
|
|||
F?r SQL-Upgradedateien:
|
|||
-- @key: value
|
|||
F?r Perl-Upgradedateien:
|
|||
# @key: value
|
|||
Leerzeichen vor "value" werden entfern.
|
|||
Die folgenden Schl?sselworte werden verarbeitet:
|
|||
* tag: Wird zwingend ben?tigt. Dies ist der "Name" des
|
|||
Upgrades. Dieser "tag" kann von anderen Kontrolldateien in ihren
|
|||
Abh?ngigkeiten verwendet werden (Schl?sselwort "depends"). Der "tag"
|
|||
ist auch der Name, der in der Datenbank eingetragen wird.
|
|||
Normalerweise sollte die Kontrolldatei genau so hei?en wie der
|
|||
"tag", nur mit der Endung ".sql" bzw. "pl".
|
|||
Ein Tag darf nur aus alphanumerischen Zeichen sowie den Zeichen _ -
|
|||
( ) bestehen. Insbesondere sind Leerzeichen nicht erlaubt und
|
|||
sollten stattdessen mit Unterstrichen ersetzt werden.
|
|||
* description: Ben?tigt. Eine Beschreibung, was in diesem Update
|
|||
passiert. Diese wird dem Benutzer beim eigentlichen Datenbankupdate
|
|||
angezeigt. W?hrend der Tag in englisch gehalten sein sollte, sollte
|
|||
die Beschreibung auf Deutsch erfolgen.
|
|||
* depends: Optional. Eine mit Leerzeichen getrennte Liste von "tags",
|
|||
von denen dieses Upgradescript abh?ngt. Lx-Office stellt sicher,
|
|||
dass die in dieser Liste aufgef?hrten Scripte bereits durchgef?hrt
|
|||
wurden, bevor dieses Script ausgef?hrt wird.
|
|||
Abh?ngigkeiten werden rekursiv betrachtet. Wenn also ein Script "b"
|
|||
existiert, das von ?nderungen in "a" abh?ngt, und eine neue
|
|||
Kontrolldatei f?r "c" erstellt wird, die von ?nderungen in "a" und
|
|||
"b" abh?ngt, so gen?gt es, in "c" nur den Tag "b" als Abh?ngigkeit
|
|||
zu definieren.
|
|||
Es ist nicht erlaubt, sich selbst referenzierende Abh?ngigkeiten zu
|
|||
definieren (z.B. "a" -> "b", "b" -> "c" und "c" -> "a").
|
|||
* priority: Optional. Ein Zahlenwert, der die Reihenfolge bestimmt, in
|
|||
der Scripte ausgef?hrt werden, die die gleichen Abh?ngigkeitstiefen
|
|||
besitzen. Fehlt dieser Parameter, so wird der Wert 1000 benutzt.
|
|||
Dies ist reine Kosmetik. F?r echte Reihenfolgen muss "depends"
|
|||
benutzt werden. Lx-Office sortiert die auszuf?hrenden Scripte zuerst
|
|||
nach der Abh?ngigkeitstiefe (wenn "z" von "y" abh?ngt und "y" von
|
|||
"x", so hat "z" eine Abh?ngigkeitstiefe von 2, "y" von 1 und "x" von
|
|||
0. "x" w?rde hier zuerst ausgef?hrt, dann "y", dann "z"), dann nach
|
|||
der Priorit?t und bei gleicher Priorit?t alphabetisch nach dem
|
|||
"tag".
|
|||
Hilfsscript dbupgrade2_tool.pl
|
|||
------------------------------
|
|||
Um die Arbeit mit den Abh?ngigkeiten etwas zu erleichtern, existiert
|
|||
ein Hilfsscript namens "scripts/dbupgrade2_tool.pl". Es muss aus dem
|
|||
Lx-Office-ERP-Basisverzeichnis heraus aufgerufen werden. Dieses Tool
|
|||
liest alle Datenbankupgradescripte aus dem Verzeichnis sql/Pg-upgrade2
|
|||
aus. Es benutzt daf?r die gleichen Methoden wie Lx-Office selber,
|
|||
sodass alle Fehlersituationen von der Kommandozeile ?berpr?ft werden
|
|||
k?nnen.
|
|||
Wird dem Script kein weiterer Parameter ?bergeben, so wird nur eine
|
|||
?berpr?fung der Felder und Abh?ngigkeiten vorgenommen. Man kann sich
|
|||
aber auch Informationen auf verschiedene Art ausgeben lassen:
|
|||
1. Listenform: "./scripts/dbupgrade2_tool.pl --list"
|
|||
Gibt eine Liste aller Scripte aus. Die Liste ist in der Reihenfolge
|
|||
sortiert, in der Lx-Office die Scripte ausf?hren w?rde. Es werden
|
|||
neben der Listenposition der Tag, die Abh?ngigkeitstiefe und die
|
|||
Priorit?t ausgegeben.
|
|||
2. Baumform: "./scripts/dbupgrade2_tool.pl --tree"
|
|||
Listet alle Tags in Baumform basierend auf den Abh?ngigkeiten
|
|||
auf. Die "Wurzelknoten" sind dabei die Scripte, von denen keine
|
|||
anderen abh?ngen. Die Unterknoten sind Scripte, die beim
|
|||
?bergeordneten Script als Abh?ngigkeit eingetragen sind.
|
|||
3. Umgekehrte Baumform: "./scripts/dbupgrade2_tool.pl --rtree"
|
|||
Listet alle Tags in Baumform basierend auf den Abh?ngigkeiten auf.
|
|||
Die "Wurzelknoten" sind dabei die Scripte mit der geringsten
|
|||
Abh?ngigkeitstiefe. Die Unterknoten sind Scripte, die das
|
|||
?bergeordnete Script als Abh?ngigkeit eingetragen haben.
|
|||
4. Baumform mit Postscriptausgabe: "./scripts/dbupgrade2_tool.pl --graphviz"
|
|||
Ben?tigt das Tool "graphviz", um mit seiner Hilfe die Baumform aus
|
|||
3. in eine Postscriptdatei namens "db_dependencies.ps"
|
|||
auszugeben. Dies ist vermutlich die ?bersichtlichste Form, weil
|
|||
hierbei jeder Knoten nur einmal ausgegeben wird. Bei den
|
|||
Textmodusbaumformen hingegen k?nnen Knoten und all ihre
|
|||
Abh?ngigkeiten mehrfach ausgegeben werden.
|
|||
5. Scripte, von denen kein anderes Script abh?ngt:
|
|||
"./scripts/dbupgrade2_tool.pl --nodeps"
|
|||
Listet die Tags aller Scripte auf, von denen keine anderen Scripte
|
|||
abh?ngen.
|