Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unknown column 'sterbedatum' at setup with MySQL #27

Open
saschnet opened this issue Feb 19, 2023 · 3 comments
Open

Unknown column 'sterbedatum' at setup with MySQL #27

saschnet opened this issue Feb 19, 2023 · 3 comments

Comments

@saschnet
Copy link

The usage of jverein fails when setting it up with a MySQL database.

I tried it already with the regular H2 approach where everything is working well. However, when setting it up with MySQL, I cannot save the basic settings (Einstellungen Allgemein) on the initial start. When saving the following error shows up:

insert failed, rollback successful; nested exception is:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'sterbedatum' in 'field list'

grafik

How to replicate:

  • Create MySQL database (e.g. through docker: `docker run -name test-mariadb -e MYSQL_ROOT_PASSWORD=XXXXXX -p 3006:3006 -d mariadb:latest)
  • Setup MySQL connection as described in https://doku.jverein.de/allgemein/mysql-support
  • Start Jameica and JVerein, go to "Einstellungen Allgemein" and click on "Speichern"

I have found no way to circumvent this error, and it is blocking us to set up the JVerein.

@saschnet saschnet changed the title Unknown column 'sterbedatum' at setup in MySQL Unknown column 'sterbedatum' at setup with MySQL Feb 19, 2023
@willuhn
Copy link
Member

willuhn commented Sep 25, 2023

Das Management der Tabellen und Spalten erfolgt über eine externe Komponente ("Liquibase"), welche datenbank-agnostisch funktioniert, das heisst - im Programmcode existieren keine Unterscheidungen zwischen H2 und MySQL. Die Spalte "sterbedatum" ist in https://github.com/openjverein/jverein/blob/master/src/liquibase/jverein.xml#L213 definiert. Warum sie in deiner MySQL-Datenbank fehlt, ist ungewöhnlich. Unter Umständen hat das Anlegen der Spalten unter MySQL nicht geklappt. In der jameica.log sollten sich hierzu aber Fehlermeldungen finden, warum die Spalte nicht angelegt werden konnte. Ggf. hat deine MySQL-Version da irgendwelche Einschränkungen.

@saschnet
Copy link
Author

Danke für das Feedback.

Wenn kompatibel mit MySQL sollte auch mariadb:latest Kompatibilität herrschen? Wenn nicht, welche MySQL Version wird denn definitiv unterstützt?

@willuhn
Copy link
Member

willuhn commented Sep 26, 2023

Ich habe gerade nochmal im Code nachgeschaut und festgestellt, dass Liquibase nur zeitweise (zwischen 2.8.0 und 2.8.1) verwendet wurde und aktuell gar nicht mehr aktiv ist. Ich nehme an, dass die Spalte mit dem Sterbedatum da irgendwo untergegangen ist.

Führe mal bitte folgendes SQL-Statement manuell auf der MySQL-Datenbank aus:

ALTER TABLE einstellung ADD sterbedatum bit(1) after eintrittsdatumpflicht;

Das ist Update Nr. 0206. Die Frage ist: Fehlen bei dir davor oder danach noch andere Updates?

Update 0205 führte folgendes Statement aus:

ALTER TABLE eigenschaften ADD CONSTRAINT fkEigenschaften2 FOREIGN KEY (eigenschaft) REFERENCES eigenschaft (id) ON DELETE CASCADE;

Führe das auch mal aus. Wenn es zu einem Fehler führt, dann wurde das Update bereits installiert und alles ist ok. Wenn es ohne Fehler durchläuft, dann fehlt auch dieses Update.

Die Update 0207 und 0208 führten die folgenden Statements aus, die du problemlos nochmal ausführen kannst. Die sollten fehlerfrei durchlaufen - auch dann, wenn sie bereits ausgheführt wurden. Interessant ist hier, ob bei der Ausführung zurückgemeldet wird, dass Datensätze geändert wurden. Falls ja, fehlten sie auch.

UPDATE abrechnungslauf SET modus = 1 where modus >=2 and modus <=4;
UPDATE einstellung SET beitragsmodel = 1 where beitragsmodel >=2 and beitragsmodel <=4;

Updated 0209 führte das hier aus:

ALTER TABLE einstellung ADD dtaustextschluessel char(2) after zahlungsrhytmus;

Wenn das zu einem Fehler führt, wurde es bereits ausgeführt und deine DB sollte sich in einem aktuellen Zustand befinden.

Führe zur Sicherheit mal noch "SELECT version FROM version WHERE id = 1" aus und poste das Ergebnis. Das wäre dann dein aktueller Datenbank-Stand.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants