Migrations-Skripte ausführen

Aus iDempiere de
Zur Navigation springen Zur Suche springen

Übersicht

Solange es noch keine endgültige Release von iDempiere gibt und wir z.B. die "Daily Build" Version der Software heruntergeladen haben, ist es wahrscheinlich, das die nun installierte Version der Datenbank-Struktur nicht einwandfrei mit dem aktuellen Software-Stand zusammenarbeitet. Um die Datenbank nachzurüsten muss man die Migrations-Skripte ausführen.


Skripte herunterladen

Diese Skripte finden sich im Source-Code des Programms im Verzeichnis "migration". Dort sind sie in Unterverzeichnisse sortiert, deren Namen die offiziellen (Adempiere-) Versionsnummern bezeichnen. Das momentan letzte Verzeichnis enthält die Anpassungen von der Version ADempiere 3.60LTS bis zur kommenden Release und es heisst deshalb "360lts-release". Darin befindet sich ein Verzeichnis für jede unterstützte Datenbank, so das unsere gesuchten Migrationsskripte also in folgendem Verzeichnis stecken:

 migration/360lts-release/postgresql/

Wer die Sourcen nicht installiert hat, braucht jetzt aber nicht in die Röhre zu schauen oder über 1GB Daten herunterladen. Hat man seine Version vom Jenkins Build Server heruntergeladen, kann man das Migrationsverzeichnis als

 http://jenkins.idempiere.com/job/iDempiereDaily/ws/migration/*zip*/migration.zip

herunterladen. Ansonsten kann man ausgehend von

 https://bitbucket.org/idempiere/idempiere/src/645a3e39d0e56f349fedb3dc0dc711add2ddfdcd/migration/?at=development

herausfinden, wie man nur dieses Verzeichnis mit Mercurial herunterladen kann (Wer einen Beispielbefehl hat, bitte hier veröffentlichen).


Passende Skripte herausfinden

Im Verzeichnis der Server-Installation gibt es die Datei

 data/seed/LAST_SCRIPT_APPLIED_ON_THIS_SEED

Diese enthält den Namen des letzten Skripts, das ausgeführt wurde, bevor der benutzte Datenbank-Dump erzeugt wurde. Alls Skripte, die mit einer höheren Nummer anfangen, müssen also noch nachgereicht werden. Welche das sind, kann man mit dem folgenden Einzeiler erfahren. Die erste Version kann man innerhalb eines kompletten Quellcodebaums starten:

  cd 360lts-release/postgresql/
  ls | egrep '^[[:digit:]]{3}.*\.sql$' | sort | tail -n +`ls | egrep '^[[:digit:]]{3}.*\.sql$' | sort | grep -n \`cat ../../../org.adempiere.server-feature/data/seed/LAST_SCRIPT_APPLIED_ON_THIS_SEED | tail -n 1\` | cut -d ':' -f1` | tail -n +2 | perl -pe 's/(.*)/psql -h localhost -d idempiere -U adempiere -f $1/' >needed_migrations.sh

Die zweite Version verlangt, das man den Namen des LAST_SCRIPT_APPLIED_ON_THIS_SEED kennt (z.B. "847_FillNewUUIDs.sql") und einfügt:

  cd 360lts-release/postgresql/
  ls | egrep '^[[:digit:]]{3}.*\.sql$' | sort | tail -n +`ls | egrep '^[[:digit:]]{3}.*\.sql$' | sort | grep -n '847_FillNewUUIDs.sql' | cut -d ':' -f1` | tail -n +2 | perl -pe 's/(.*)/psql -h localhost -d idempiere -U adempiere -f $1/' >needed_migrations.sh


Migrationsskripte ausführen

Bevor man das macht, bietet es sich an, ein passwortloses Datenbank-Login zu konfigurieren, wie hier beschrieben.

Falls man das Skript Nr. 857 noch nicht ausgeführt hat (wie es beim im Oktober 2012 aktuellen Seed ist), muss noch einen zusätzlichen Befehl ausführen, um im PostgreSQL-Server ein Modul zu installieren. Leider ist das in PostgreSQL 8.4 nicht so einfach (aber möglich). In PostgreSQL 9.1 geht es so:

 psql -h localhost -d idempiere -U adempiere -c 'CREATE EXTENSION "uuid-ossp";'

Danach kann man die soeben erzeugte Datei ggf. anschauen und kann sie dann starten:

 sh needed_migrations.sh


Zum Abschluss gibt es noch einige zusätzliche Skripte auszuführen:

 cat ../../processes_post_migration/postgresql/*.sql | psql -h localhost -d idempiere -U adempiere

von vorne anfangen

Wer sich irgendwo verhaspelt, kann immer wieder von vorne anfangen. Dazu kann man die Datenbank per pgAdmin einfach löschen, um sicher zu gehen. Das ist aber eigentlich nicht nötig, weil das Installationsskript RUN_ImportIdempiere.sh das am Anfang sowieso macht.